通过云监控(CMS)报警回调实现云服务器报警信息的语音播报

本文涉及的产品
云监控,每月短信1000条
简介: 本文介绍了获取云监控报警回调的有趣实践。

本文介绍了获取云监控报警回调的有趣实践。

本文内容来自实战派征文,作者为wangbin_ouhin。

场景介绍

针对阿里云上部署的业务系统,现在有通过Zabbix收集指标和服务的死活监视。

为了提高业务监视的可靠性和及时性,经调查后决定通过使用阿里云的云监控和Zabbix组成双保险,并针对核心服务器进行深度定制:当云监控(CMS)监视到问题时,通过报警回调办公区树莓派的Web接口,实现办公区内的语音播报。便于运维小伙伴及时跟进。

结构图如下:

目标读者

已在使用阿里云平台,想要通过云监控的报警回调第一时间获取系统警报的运维团队。

前提条件/环境准备

  1. 已开通云监控(CMS)服务

  2. 一台云服务器(监视对象)

  3. 办公区内的树莓派(标准noobs系统)及音响

操作步骤

步骤一:在树莓派上启动报警回调服务

报警服务基于Python3实现,使用Python CGI脚本启动Web服务,并通过路由器的NAT对外公开,以供阿里云调用。

服务目录文件如下

../

├── cgi-bin

│ └── warning.py <= 语音播报脚本

├── cgiserver.py <= Web服务CGI脚本

├── warning-recovery.mp3 <= 报警事件恢复的语音文件

└── warning.mp3 <= 报警事件开始的语音文件

  1. 语音播报脚本(warning.py)的实现

使用vlc库播放语音。

使用cgi库获取云监控的回调参数。

'alertState'为OK视为问题恢复;

上述以外视为问题发生。

*报警参数文档URL:

https://help.aliyun.com/document_detail/60714.html?utm_content=g_1000230851&spm=5176.20966629.toubu.3.f2991ddcpxxvD1#h2-url-4

*源代码:

#!/usr/bin/env python3

import time,vlc
import cgi

form = cgi.FieldStorage()
audio_file = "warning.mp3"
if 'alertState' in form and form['alertState'].value == "OK":
audio_file = "warning-recovery.mp3"

audio_warning="file:///home/pi/Desktop/py-server/" + audio_file
vlc_instance = vlc.Instance()
vlc_player = vlc_instance.media_player_new()
vlc_media = vlc_instance.media_new(audio_warning)
vlc_player.set_media(vlc_media)
vlc_player.play()
time.sleep(1)
audio_length = vlc_player.get_length() / 1000
time.sleep(audio_length)
Web服务CGI脚本(cgiserver.py)的实现
使用Python标准的http.server库来启动Web服务。此处使用8000端口提供服务。
*源代码:
from http.server import CGIHTTPRequestHandler, HTTPServer

handler = CGIHTTPRequestHandler
handler.cgi_directories = ['/cgi-bin', '/htbin'] # this is the default
server = HTTPServer(('0.0.0.0', 8000), handler)
server.serve_forever()

  1. 准备报警开始和恢复时的mp3文件

建议使用10秒以内辨识度高的语音文件,文本最好重复2遍。

另外,记得在树莓派音量按钮右键点击,选择AV Jack,以便通过音响输出。

*此处非常感谢办公室的小姐姐友情录音。

  1. 启动Web服务对外公开

转到cgiserver.py脚本目录,执行如下命令启动Web服务。

python3 cgiserver.py

并在路由器上设置NAT把树莓派的8000端口服务对外公开。

*由于路由器厂商差别较大此处省略截图。

步骤二:云监控(CMS)报警规则设定

  1. 创建报警规则

打开【云监控】服务,依次点击左侧【报警服务】》【报警规则】。页面展示后点击【创建报警规则】按钮。设置截图及说明如下:

  1. 添加监视规则

本次实验以云服务器的CPU使用率为例进行展示。截图及说明如下:

方案验证

  1. 进入验证用云服务器,使CPU使用率达到100%

执行命令: yes > /dev/null &

*本服务器是双核,需要执行两次

*记录下返回的PID,测试完毕后使用kill PID命令结束进程。

  1. 树莓派接收到阿里云的调用

手机和邮件收到报警信息的同事,树莓派连接的音响播放了报警信息。

恢复的时的报警同理。

结语

通过云监控的回调来播放报警语音的尝试得到了同事们的认可,可以在开会等不方便查看短信及邮件的情况下第一时间了解到报警状况。后续还可以结合IoT配置灯光提醒,有很大的扩展潜力。有兴趣的小伙伴可以尝试一下。

相关实践学习
基于云监控实现的监控系统
通过阿里云云监控功能给非阿里云主机安装监控插件,从而实现对非阿里云主机的各项指标进行监控和管理,在配置报警规则和报警人的情况下,能对特定的场景做出报警反应通知到报警人的手机上。
相关文章
|
5月前
|
存储 Unix 数据挖掘
服务器数据恢复—DS4800存储lvm信息丢失数据恢复案例
DS4800服务器存储lvm信息丢失,基于DS4800的aix小机卷丢失。
服务器数据恢复—DS4800存储lvm信息丢失数据恢复案例
|
1月前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
|
5月前
|
存储 安全 数据挖掘
服务器数据恢复—异常断电导致EVA存储中RAID信息丢失的数据恢复案例
意外断电导致raid硬件损坏或者riad管理信息丢失等raid模块损坏而导致数据丢失的情况非常普遍。正常情况下,磁盘阵列一旦创建完成就不会再对管理模块中的信息进行更改,但是raid管理模块中的信息属于可修改信息,一次或多次的意外断电可能会导致这部分信息被篡改或丢失。断电次数过多甚至会导致raid卡上的元器损坏。
|
1月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
467 2
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
34 3
|
1月前
|
Ubuntu 关系型数据库 MySQL
如何选择适合CMS运行的服务器?
在数字互联网时代,企业与单位都需要搭建企业官网在互联网上展示自己的品牌和产品宣传。除去了传统建设公司开发网站外,使用CMS就成为常用的网站创建方式。而成功的网站除了选对CMS外,还需要考虑到搭建完CMS的服务器。今天的文章给大家介绍:如何选择CMS和服务器: 很多客户都不清楚是选择CMS还是先选择服务器?
|
2月前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
54 1
|
2月前
|
应用服务中间件 PHP Apache
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
|
3月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
200 5
|
3月前
|
人工智能 运维 安全
专访浪潮信息:AI 原生时代,浪潮信息引领服务器操作系统创新 全面贡献龙蜥社区
分享了关于 AI 原生化趋势下服务器操作系统进化的思考,以及浪潮信息在龙蜥社区开源贡献的思路、成果与未来技术发展规划。
专访浪潮信息:AI 原生时代,浪潮信息引领服务器操作系统创新 全面贡献龙蜥社区