通过阿里云语音服务实现Zabbix电话告警实战

通过阿里云语音服务实现Zabbix电话告警实战_第1张图片

新钛云服已为您服务1018

通过阿里云语音服务实现Zabbix电话告警实战_第2张图片

Zabbix作为老牌的开源监控平台,相信有不少小伙伴对它也非常了解。Zabbix告警支持包括Email、SMS、Script、Webhook四大类,常用的邮件告警,短信告警、钉钉告警、微信告警和电话告警 Zabbix都可以支持。

zabbix电话告警,它的实现方式也有好几种,网上比较多的是商业告警平台来实现,这种方案在多团队,多成员的情况下,价格稍微有点贵。本篇通过阿里云语音服务来实现zabbix电话告警,成本就非常低了仅支付语音费用,目前是0.11/分钟,没有其他费用。话不多说,直接实战。

通过阿里云语音服务实现Zabbix电话告警实战_第3张图片

第一步:阿里云语音服务设置

首先,你需要有一个阿里云的账号,并且完成了企业认证,需要注意,阿里云【语音服务】,只能企业才能使用,个人用户是无法使用的。

在阿里云控制台-产品与服务搜索栏,查找语音服务,第一次点开会提示你开通语音服务,点击【开通】,这步是不收费的。开通之后,我们第一步需要进行号码申请,在【语音服务】页面,左侧菜单,【号码申请】->【资质管理】里面,添加新资质。

通过阿里云语音服务实现Zabbix电话告警实战_第4张图片

如下图,号码用途,选择【语音通知】,使用场景1选择【系统告警通知】,外呼话术1,可以按提示进行填写,也可以参考下图中的内容填写。

通过阿里云语音服务实现Zabbix电话告警实战_第5张图片

页面往下看,还需要进行备案信息的填写,需要提交的资料和域名备案的类似,详见下图:

通过阿里云语音服务实现Zabbix电话告警实战_第6张图片

所有信息填写完成,提交后,正常工作日1-2小时就能通过。完成之后,如下图:

通过阿里云语音服务实现Zabbix电话告警实战_第7张图片

完成资质申请之后,添加【语音通知】模板:

通过阿里云语音服务实现Zabbix电话告警实战_第8张图片

添加模板,如下图,外呼号码:可以选择【公共号池号码外呼】,这个是不需要单独购买号码的,使用专属号码需要先购买号码,每个号码会产生月租费35元/月,选择【公共号池号码外呼】,但是也会带来一个问题,就是如果晚上手机开了勿扰模式,因为每次都是不同号码打过来的,会手机被屏蔽掉,这点大家需要注意。

关联资质:选择刚才添加的资质,模板名称:可以随便叫,模板内容:定义电话告警的内容,其中涉及变量的部分用${} 的格式定义,调用的时候,可以给这些变量传值。大家可以参考下面截图的方式写。

通过阿里云语音服务实现Zabbix电话告警实战_第9张图片

添加完模板后,需要等待审核,正常工作日,当天可以完成审核,审核完成,状态会变成【通过】,审核通过后,这个模板就可以使用了。如下图,需要记住【模板ID】,这个在告警脚本中需要使用。

通过阿里云语音服务实现Zabbix电话告警实战_第10张图片

模板添加完成后,我们还需要创建一个阿里云的AK/SK ,用于脚本调用时候鉴权;

在阿里云控制台-产品与服务搜索栏,查找【RAM访问控制】,【人员管理】->【用户】 创建用户:

通过阿里云语音服务实现Zabbix电话告警实战_第11张图片

创建用户时,注意在访问方式中选择【编程访问】,登录名和显示名称可以随便写,只要符合规范即可。

通过阿里云语音服务实现Zabbix电话告警实战_第12张图片

点击【确定】,会给账号绑定的手机号发生验证码,完成验证,用户创建完成,用户添加完成后,如下图,会显示用户的信息及AK/SK ,可以下载CSV文件,也可以直接保存AK/SK, 注意这个信息只会显示一次,且非常重要不能对外泄露,同时在下文会使用到AK/SK.

通过阿里云语音服务实现Zabbix电话告警实战_第13张图片

用户创建完成后,需要给这个用户授权,如下图,授权范围,不清楚资源的话可以选择【云账号全部资源】,被授权主体就是刚才创建的用户,搜索用户名并选择他;选择权限中搜索语音,选择【管理语音服务(VMS)的权限】添加过去,点【确定】即可。

通过阿里云语音服务实现Zabbix电话告警实战_第14张图片

到这里,阿里云上的操作就结束了。总结一下,我们做了几件事,1. 开通语音服务;2.添加企业资质;3.创建语音模板;4.添加用户并授权。


第二步:电话告警脚本编写

  • 安装python3.6

    如果你的系统是CentOS7,那么需要安装python3.6, python2不支持。

    yum install epel-release
    yum install python36
    pip3 install --upgrade pip
    
  • 安装阿里SDK

    pip3 install aliyun-python-sdk-dyvmsapi
    
  • 创建python告警脚本

#!/usr/bin/python3
#coding=utf-8
import sys
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkdyvmsapi.request.v20170525.SingleCallByTtsRequest import SingleCallByTtsRequest

def CallPhone(callphone,msg):
#告警信息处理,将告警进行转化为列表
    print(msg)
    textlist = msg.split('\r\n')
    print(textlist)
    textdic={}
#告警信息处理,将告警信息列表转化为字典
    for item in textlist:
        tem = item.split(':',1)
        textdic[tem[0]]=tem[1]
        
    print(textdic)
    hostname = textdic["告警主机"]
    alert_msg = textdic["告警信息"]
    alert_time = textdic["告警时间"]
    alert_gruop = textdic["所属分组"]
#电话告警的信息处理,去除敏感字符
    call_msg = str(alert_msg).replace('\\','').replace('"','').replace(':','')+",故障主机分组"+str(alert_gruop)+",故障发生时间"+str(alert_time).replace('.','年',1).replace('.','月',1).replace(' ','日').replace(':','点',1).replace(':','分',1)
    fin_msg = {"hostname":str(hostname).replace('.','点'),"msg":call_msg}
    print("呼叫号码:"+callphone[0] +"  告警信息:"+str(fin_msg))
#调用阿里云语音接口进行发送
    client = AcsClient('<用户AK>', '<用户SK>', 'cn-hangzhou')
    request = SingleCallByTtsRequest()
    request.set_accept_format('json')
    request.set_CalledNumber(callphone[0])
    request.set_TtsCode("<模版ID>")
    request.set_TtsParam(fin_msg)
    response = client.do_action_with_exception(request)
    # python2:  print(response) 
    print(str(response, encoding='utf-8'))

if __name__ == '__main__':
    f=open("/var/log/alivoice.log","a+")
    f.write("\n"+"--"*40+"\n")
    f.write(str(sys.argv))
    f.close()
#获取告警信息
    text = sys.argv[2]
    try:
#获取告警电话
        callphone = sys.argv[1].split(',')
    except IndexError as e:
        callphone = []
    CallPhone(callphone,text)

#调用信息的格式如下
#./alivoice.py 13400000000 '警主机:backupcenter-slave\r\n告警地址:192.168.106.215\r\n所属分组:Discovered hosts, 内部系统\r\n告警信息:/data: Disk space is low (used > 80%)\r\n告警时间:2021.03.03 02:37:02\r\n事件ID:596689'

上述脚本在使用时,需要根据情况配置 ,第30行    client = AcsClient('<用户AK>', '<用户SK>', 'cn-hangzhou'),第34行  request.set_TtsCode("<模版ID>"), 用户AK和用户SK是在阿里云创建用户时产生的,模版ID是创建的语音模板中有显示。正常情况下,按调试信息测试,你的手机就会收到一个电话,语音内容【您维护的主机backupcenter-slave发生故障,请立即处理。故障详情/data: Disk space is low (used > 80%),故障主机分组内部系统,故障发生时间2021年03月03 日02点37分02】


第三步:Zabbix电话告警配置

  • 登录Zabbix服务器,将电话告警脚本放到告警脚本默认目录/usr/lib/zabbix/alertscripts/alivoice.py

    chmod +x /usr/lib/zabbix/alertscripts/alivoice.py
    touch /var/log/alivoice.log
    chmod o+w /var/log/alivoice.log
    
  • 登录zabbix 平台,【Administrator】 ->【Media Types】,点击Create media type

通过阿里云语音服务实现Zabbix电话告警实战_第15张图片

  • Name可以随便写,Type选择Script, Script name 必须和放到服务器上的脚本名相同,Script parameter里面必须配置{ALERT.SENDTO},{ALERT.MESSAGE}

通过阿里云语音服务实现Zabbix电话告警实战_第16张图片

  • 添加Messages Template,在Messages type中选择Problem,指定subject 和Messages

通过阿里云语音服务实现Zabbix电话告警实战_第17张图片

特别注意Message必须如下配置,因为在告警脚本中会处理这些关键字段。

再用同样的方法,添加问题恢复是告警【Problem recovery】,和问题更新时告警【Problem update】;电话告警的目的是为了出现问题及时通知,所以定义出现告警【Problem】即可,当然你可以跟进现在进行配置。

告警主机:{HOST.NAME}
告警地址:{HOST.IP}
所属分组:{TRIGGER.HOSTGROUP.NAME}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
  • 用户media中添加电话告警,设置手机号,和告警接收时间

通过阿里云语音服务实现Zabbix电话告警实战_第18张图片

  • 添加Action,管理主机和电话告警

    【Configuration】->【Action】,Create action;

通过阿里云语音服务实现Zabbix电话告警实战_第19张图片

在Operations中告警选择告警Media为【电话告警】。

通过阿里云语音服务实现Zabbix电话告警实战_第20张图片

至此,Zabbix上的配置就完成了。下面可以把Action中配置的主机,关闭一下Agent触发告警,看是否会收到电话告警,正常情况下,会收到一个电话,接通后播放类似 【您维护的主机backupcenter-slave发生故障,请立即处理。故障详情/data: Disk space is low (used > 80%),故障主机分组内部系统,故障发生时间2021年03月03 日02点37分02】

总结:

当zabbix出发告警时,将告警信息传递给电话告警脚本,脚本再调用阿里云语音服务接口,把告警信息传递给接口,由阿里云语音服务负责,文字转语音再拨打电话,接通后播放语音。逻辑也不复杂,希望这篇实战文档对你有帮助。

了解新钛云服

新钛云服荣膺第四届FMCG零售消费品行业CIO年会「年度数字化服务最值得信赖品牌奖」

新钛云服三周岁,公司月营收超600万元,定下百年新钛的发展目标

当IPFS遇见云服务|新钛云服与冰河分布式实验室达成战略协议

新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照

深耕专业,矗立鳌头,新钛云服获千万Pre-A轮融资

新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

新钛云服一周年,完成两轮融资,服务五十多家客户

上海某仓储物流电子商务公司混合云解决方案

往期技术干货

Kubernetes扩容到7,500节点的历程

低代码开发,全民开发,淘汰职业程序员!

国内主流公有云VPC使用对比及总结

万字长文:云架构设计原则|附PDF下载

刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!

Ceph OSD故障排除|万字经验总结

七个用于Docker和Kubernetes防护的安全工具

运维人的终身成长,从清单管理开始|万字长文!

OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

什么是云原生?

IT混合云战略:是什么、为什么,如何构建?

通过阿里云语音服务实现Zabbix电话告警实战_第21张图片

你可能感兴趣的:(运维,docker,阿里云,分布式存储,ceph)