Zabbix通过与微信、钉钉整合实现实时告警
abbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbix结合微信、钉钉作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告警的及时处理。
一、Zabbix整合微信实现实时告警
1.1、微信企业号申请
要实现将告警信息发送到微信,需要申请一个企业微信号,当然个人也可以申请,登录http://work.weixin.qq.com/, 然后选择注册即可,如下图所示:
这是注册企业微信的步骤,企业名称可以填写企业、政府或组织,个人就选组织,接着需要选择管理员姓名和电话号码,通过短信验证后,还需要管理员通过微信扫描绑定企业号,以后就可以通过管理员的微信登录企业号管理后台。
添加完成,点击“注册”,然后选择“进入管理后台”,即可进入企业微信后台,如下图所示:
进入后台,接着选择导航栏中的“通讯录”,在企业微信中添加人员,如下图所示:
可通过手动添加成员,或者微信邀请的方式添加成员。成员添加后,可以查看成员详情,如下图所示:
这里需要注意,每个成员的账号需要记录下来,后面在zabbix配置中会用到。并且每个成员只有关注微工作台后,才能在微信中收取企业微信的告警信息。
那么如何关注微工作台呢,选择导航中“连接微信”选项,如下图所示:
选择左侧导航中的微工作台,右边就会出现微工作台的介绍,这里重点了解一下微工作台的用途,通过微工作台,企业微信成员无需下载企业微信客户端,直接用微信扫码关注微工作台,即可在微信中接收企业通知和使用企业应用。
如何关注微工作台呢,如下图所示:
在上图邀请关注中,有个二维码,让每个成员扫描这个二维码即可关注微工作台,此外还可以对微工作台进行各种设置。
接着,选择导航栏中的“应用与小程序”,开始创建一个应用,如下图所示:
这里选择自建应用,然后开始创建一个应用,如下图所示:
这里添加应用logo、应用名称和介绍,还有这个应用的可见范围,选择对应的人员即可。应用创建成功之后,会显示应用信息,如下图所示:
这里重点记录下此应用的AgentId和Secret,后面会在zabbix配置中用到。
最后,点击导航中“我的企业”,记录下企业ID这个信息,如下图所示:
最下面的企业ID后面这个字符串我们也需要记录下来,后面zabbix配置中会用到。
到此为止,关于企业微信的注册和要配置的内容已经介绍完毕了。
1.2、获取微信告警脚本
要将告警信息发送给微信,就需要一个发送脚本,可从如下地址下载这个脚本:
[root@zabbixserver ~]#wget https://www.ixdba.net/zabbix/weixin_linux_amd64
然后将此脚本放在zabbix server的alertscripts目录下,我们这里是/usr/local/zabbix/share/zabbix/alertscripts,接着做一些可执行权限修改:
[root@zabbixserver alertscripts]# mv weixin_linux_amd64 weixin
[root@zabbixserver alertscripts]# chmod 755 weixin
最后,修改zabbix server配置文件zabbix_server.conf,添加如下内容:
AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
这样设置后,zabbix web端就可以自动获取到脚本。
接下来,先测试一下这个脚本是否可用,可执行如下命令测试:
[root@zabbixserver alertscripts]# ./weixin --corpid=ww962865bb7f121382 --corpsecret=FFRXeC9TAFIaYzi50cQQg6RP8CFVsIEB3Ef1rcWW1f0 --msg="您好,这是微信告警测试" --user=zhouxingxing --agentid=1000003
{"errcode":0,"errmsg":"ok","invaliduser":""}
其中:
corpid= 企业号里面的企业ID。
corpsecret:这里就是我们自建应用里面的Secret的id。
agentid:我们自建应用里面的AgentId。
msg:要发送的消息内容。
user:邀请用户的账号,注意是在微信企业号里面成员详情页的账号。
如果执行完毕没有报错,那么我们的微信就应该收到了这条命令的告警信息了。
1.3、zabbix web上配置微信告警
打开zabbix web,选择导航栏上面的“管理”,然后选择“报警媒介类型”,接着点击右上角“创建媒体类型”,如下图所示:
这里有几个需要注意的,就是corpid、corpsecret和agentid,这三个参数的值都是从微信企业号后台获取的,上面已经做过特别指出了。
另外,报警类型选择脚本,脚本名称就是上面下载的那个脚本,我们重命名为winxin,那么这里就填入weixin即可。
接着,选择导航栏上面的“管理”,然后选择“用户”,可以在现有的用户下编辑,也可以新建用户,这里我们以管理员用户Admin为例,点击用户进入编辑页面,选择“报警媒介”,点击下面的添加按钮,添加一个报警类型为“微信告警”,如下图所示:
这里需要注意这个“收件人”的设置,这个收件人就是在微信企业号后台中,通讯录下面的成员详情页面看到的账号,一定不要写错了。
最后一步,是配置一个报警动作,点击导航栏上面的“配置”,然后选择“动作”,点击右上方事件源选择“触发器”,然后点击“创建动作”,如下图所示:
这里自定义一个动作名称,然后点击上面的“操作”按钮,如下图所示:
在这个界面下,“默认操作步骤持续时间”就选择默认的1小时即可,默认标题和消息内容模板可配置如下:
默认标题:
服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
消息内容:
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
最后的那个“操作”,按照如下配置即可:
这样,故障时发生告警信息配置完成,接着配置故障恢复后的信息发送格式,点击上面的“恢复操作”按钮,如下图所示:
在这个界面下,默认标题和消息内容模板可配置如下:
默认标题:
服务器:{HOST.NAME}: {TRIGGER.NAME}已恢复!
消息内容:
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
持续时间:{EVENT.AGE}
事件ID:{EVENT.ID}
最后的那个“操作”,按照如下配置即可:
至此,微信告警整合zabbix,配置完成。
1.4、测试微信告警功能
可以模拟一个监控项故障,然后测试告警信息是否能通过zabbix发送给微信,这里我们模拟一个mysql故障的恢复,检查告警信息是否能通过zabbix发送给微信,可点击zabbix web下的“报表”,然后选择“动作日志”,查看告警信息发送日志,如下图所示:
这个界面显示了告警日志是否发送成功,如果没有发送成功,可以看到具体的错误信息,然后根据错误排查即可。如果显示发送成功,那么我们的微信就能收到告警信息了,如下图所示:
这样,微信整合zabbix告警功能,成功实现。
二、Zabbix整合钉钉实现实时告警
2.1、关于钉钉机器人告警
钉钉类似于微信,但是偏向于办公方向,可以通过钉钉的群机器人功能,实现将告警信息通过机器人发送到钉钉群。
群机器人是钉钉群的高级扩展功能。群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步。例如:通过聚合GitHub,GitLab等源码管理服务,实现源码更新同步;通过聚合Trello,JIRA等项目协调服务,实现项目信息同步。不仅如此,群机器人支持Webhook协议的自定义接入,支持更多可能性,例如:你可将运维报警提醒通过自定义机器人聚合到钉钉群。
zabbix整合钉钉告警,相比微信,要简单很多,几分钟内即可完成配置,下面详细介绍如下。
2.2、添加钉钉机器人
关于钉钉的注册很简单,这里不再过多介绍。注册完成登录到钉钉后,先发起一个群聊,加入需要接收钉钉告警信息的人员,如下图所示:
然后,创建一个群聊,开始选择需要添加的人员,如下图所示:
群聊创建完成后,接着就可以添加机器人到群里面了。点击用户下拉菜单,如下图所示:
在这里选择“机器人管理”,然后进入下图所示界面:
这里选择自定义机器人,通过webhook接入自定义服务,接着,开始添加一个机器人,如下图所示:
输入机器人名字,并指定一个已经存在的钉钉群,点击完成,机器人添加完毕,接着进入下图界面:
这里是设置webhook,将这个webhook地址复制记录下来,后面会用到。机器人配置到此结束。
2.3、获取钉钉告警脚本
这里我们定义了一个python脚本,命名为dingding.py,内容如下:
# vim /usr/local/zabbix/alertscripts/dingding.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "https://oapi.dingtalk.com/robot/send?access_token=nwknfenfnfuflbufnoenwbjwek" #这个是webhook地址,修改为你的即可。
def msg(text):
json_text= {
"msgtype": "text",
"text": {
"content": text
},
}
print requests.post(api_url,json.dumps(json_text),headers=headers).content
if __name__ == '__main__':
text = sys.argv[1]
msg(text)
这里通过python定义了一个告警脚本,此脚本可从如下地址下载:
[root@iivey ~]#https://www.ixdba.net/zabbix/dingding.zip
这个脚本中用到了requests,requests是python的一个HTTP客户端库,跟urllib,urllib2类似,如果你的服务器没有安装requests,需要通过如下方法安装一下:
[root@zabbixserver ~]#yum install python-pip
[root@zabbixserver ~]#pip install requests
最后,将此脚本放到zabbix server的alertscripts目录下,我们这里是/usr/local/zabbix/share/zabbix/alertscripts,接着做一些可执行权限修改:
[root@zabbixserver alertscripts]# chmod 755 dingding.py
最后,修改zabbix server配置文件zabbix_server.conf,添加如下内容:
AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
这样设置后,zabbix web端就可以自动获取到脚本。
2.4、zabbix web上配置钉钉告警
打开zabbix web,选择导航栏上面的“管理”,然后选择“报警媒介类型”,接着点击右上角“创建媒体类型”,如下图所示:
这里有几个需要注意的,就是alert.message,这个是仅仅获取告警内容,另外,报警类型选择脚本,脚本名称就是上面下载的那个脚本,我们重命名为dingding.py,那么这里就填入dingding.py即可。
接着,选择导航栏上面的“管理”,然后选择“用户”,可以在现有的用户下编辑,也可以新建用户,这里我们以管理员用户Admin为例,点击用户进入编辑页面,选择“报警媒介”,点击下面的添加按钮,添加一个报警类型为“钉钉告警”,如下图所示:
这里需要注意这个“收件人”的设置,这个收件人输入“all”即可,这样,钉钉群下面的成员都能收到告警信息了。
最后一步,是配置一个报警动作,点击导航栏上面的“配置”,然后选择“动作”,点击右上方事件源选择“触发器”,然后点击“创建动作”,如下图所示:
这里自定义一个动作名称,然后点击上面的“操作”按钮,如下图所示:
在这个界面下,“默认操作步骤持续时间”就选择默认的1小时即可,默认标题和消息内容模板可配置如下:
默认标题:
故障{TRIGGER.STATUS},服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
消息内容:
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
最后的“操作”细节就按照上图的选择即可。这样,故障时发生告警信息配置完成,接着配置故障恢复后的信息发送格式,点击上面的“恢复操作”按钮,如下图所示:
在这个界面下,默认标题和消息内容模板可配置如下:
默认标题:
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
消息内容:
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
持续时间:{EVENT.AGE}
事件ID:{EVENT.ID}
最后的那个“操作”细节,按照上图的选择即可。
至此,钉钉告警整合zabbix配置完成。
2.5、测试钉钉告警功能
可以模拟一个监控项故障,然后测试告警信息是否能通过zabbix发送给钉钉群,这里我们模拟一个mysql故障的恢复,检查告警信息是否能通过zabbix发送给钉钉群,可点击zabbix web下的“报表”,然后选择“动作日志”,查看告警信息发送日志,如下图所示:
这个界面显示了告警日志是否发送成功,如果没有发送成功,可以看到具体的错误信息,然后根据错误排查即可。如果显示发送成功,那么我们的钉钉就能收到告警信息了,如下图所示:
这样,钉钉整合zabbix告警功能,成功实现。