Zabbix通过与微信、钉钉整合实现实时告警

时间:2022-04-13 19:20:27

abbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbix结合微信、钉钉作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告警的及时处理。

一、Zabbix整合微信实现实时告警

1.1、微信企业号申请

要实现将告警信息发送到微信,需要申请一个企业微信号,当然个人也可以申请,登录http://work.weixin.qq.com/, 然后选择注册即可,如下图所示:
Zabbix通过与微信、钉钉整合实现实时告警
这是注册企业微信的步骤,企业名称可以填写企业、*或组织,个人就选组织,接着需要选择管理员姓名和电话号码,通过短信验证后,还需要管理员通过微信扫描绑定企业号,以后就可以通过管理员的微信登录企业号管理后台。

添加完成,点击“注册”,然后选择“进入管理后台”,即可进入企业微信后台,如下图所示:
Zabbix通过与微信、钉钉整合实现实时告警
进入后台,接着选择导航栏中的“通讯录”,在企业微信中添加人员,如下图所示:
Zabbix通过与微信、钉钉整合实现实时告警
可通过手动添加成员,或者微信邀请的方式添加成员。成员添加后,可以查看成员详情,如下图所示:
Zabbix通过与微信、钉钉整合实现实时告警
这里需要注意,每个成员的账号需要记录下来,后面在zabbix配置中会用到。并且每个成员只有关注微工作台后,才能在微信中收取企业微信的告警信息。

那么如何关注微工作台呢,选择导航中“连接微信”选项,如下图所示:
Zabbix通过与微信、钉钉整合实现实时告警
选择左侧导航中的微工作台,右边就会出现微工作台的介绍,这里重点了解一下微工作台的用途,通过微工作台,企业微信成员无需下载企业微信客户端,直接用微信扫码关注微工作台,即可在微信中接收企业通知和使用企业应用。
如何关注微工作台呢,如下图所示:
Zabbix通过与微信、钉钉整合实现实时告警

在上图邀请关注中,有个二维码,让每个成员扫描这个二维码即可关注微工作台,此外还可以对微工作台进行各种设置。

接着,选择导航栏中的“应用与小程序”,开始创建一个应用,如下图所示:
Zabbix通过与微信、钉钉整合实现实时告警

这里选择自建应用,然后开始创建一个应用,如下图所示:

Zabbix通过与微信、钉钉整合实现实时告警

这里添加应用logo、应用名称和介绍,还有这个应用的可见范围,选择对应的人员即可。应用创建成功之后,会显示应用信息,如下图所示:

Zabbix通过与微信、钉钉整合实现实时告警
这里重点记录下此应用的AgentId和Secret,后面会在zabbix配置中用到。

最后,点击导航中“我的企业”,记录下企业ID这个信息,如下图所示:
Zabbix通过与微信、钉钉整合实现实时告警
最下面的企业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,选择导航栏上面的“管理”,然后选择“报警媒介类型”,接着点击右上角“创建媒体类型”,如下图所示:

Zabbix通过与微信、钉钉整合实现实时告警

这里有几个需要注意的,就是corpid、corpsecret和agentid,这三个参数的值都是从微信企业号后台获取的,上面已经做过特别指出了。

另外,报警类型选择脚本,脚本名称就是上面下载的那个脚本,我们重命名为winxin,那么这里就填入weixin即可。

接着,选择导航栏上面的“管理”,然后选择“用户”,可以在现有的用户下编辑,也可以新建用户,这里我们以管理员用户Admin为例,点击用户进入编辑页面,选择“报警媒介”,点击下面的添加按钮,添加一个报警类型为“微信告警”,如下图所示:
Zabbix通过与微信、钉钉整合实现实时告警

这里需要注意这个“收件人”的设置,这个收件人就是在微信企业号后台中,通讯录下面的成员详情页面看到的账号,一定不要写错了。

最后一步,是配置一个报警动作,点击导航栏上面的“配置”,然后选择“动作”,点击右上方事件源选择“触发器”,然后点击“创建动作”,如下图所示:

Zabbix通过与微信、钉钉整合实现实时告警

这里自定义一个动作名称,然后点击上面的“操作”按钮,如下图所示:

Zabbix通过与微信、钉钉整合实现实时告警

在这个界面下,“默认操作步骤持续时间”就选择默认的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}

最后的那个“操作”,按照如下配置即可:

Zabbix通过与微信、钉钉整合实现实时告警

这样,故障时发生告警信息配置完成,接着配置故障恢复后的信息发送格式,点击上面的“恢复操作”按钮,如下图所示:

Zabbix通过与微信、钉钉整合实现实时告警

在这个界面下,默认标题和消息内容模板可配置如下:

默认标题:

服务器:{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通过与微信、钉钉整合实现实时告警

至此,微信告警整合zabbix,配置完成。

1.4、测试微信告警功能

可以模拟一个监控项故障,然后测试告警信息是否能通过zabbix发送给微信,这里我们模拟一个mysql故障的恢复,检查告警信息是否能通过zabbix发送给微信,可点击zabbix web下的“报表”,然后选择“动作日志”,查看告警信息发送日志,如下图所示:
Zabbix通过与微信、钉钉整合实现实时告警

这个界面显示了告警日志是否发送成功,如果没有发送成功,可以看到具体的错误信息,然后根据错误排查即可。如果显示发送成功,那么我们的微信就能收到告警信息了,如下图所示:

Zabbix通过与微信、钉钉整合实现实时告警

这样,微信整合zabbix告警功能,成功实现。

二、Zabbix整合钉钉实现实时告警

2.1、关于钉钉机器人告警

钉钉类似于微信,但是偏向于办公方向,可以通过钉钉的群机器人功能,实现将告警信息通过机器人发送到钉钉群。

群机器人是钉钉群的高级扩展功能。群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步。例如:通过聚合GitHub,GitLab等源码管理服务,实现源码更新同步;通过聚合Trello,JIRA等项目协调服务,实现项目信息同步。不仅如此,群机器人支持Webhook协议的自定义接入,支持更多可能性,例如:你可将运维报警提醒通过自定义机器人聚合到钉钉群。

zabbix整合钉钉告警,相比微信,要简单很多,几分钟内即可完成配置,下面详细介绍如下。

2.2、添加钉钉机器人

关于钉钉的注册很简单,这里不再过多介绍。注册完成登录到钉钉后,先发起一个群聊,加入需要接收钉钉告警信息的人员,如下图所示:

Zabbix通过与微信、钉钉整合实现实时告警

然后,创建一个群聊,开始选择需要添加的人员,如下图所示:

Zabbix通过与微信、钉钉整合实现实时告警

群聊创建完成后,接着就可以添加机器人到群里面了。点击用户下拉菜单,如下图所示:
Zabbix通过与微信、钉钉整合实现实时告警

在这里选择“机器人管理”,然后进入下图所示界面:

Zabbix通过与微信、钉钉整合实现实时告警

这里选择自定义机器人,通过webhook接入自定义服务,接着,开始添加一个机器人,如下图所示:

Zabbix通过与微信、钉钉整合实现实时告警

输入机器人名字,并指定一个已经存在的钉钉群,点击完成,机器人添加完毕,接着进入下图界面:

Zabbix通过与微信、钉钉整合实现实时告警

这里是设置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,选择导航栏上面的“管理”,然后选择“报警媒介类型”,接着点击右上角“创建媒体类型”,如下图所示:
Zabbix通过与微信、钉钉整合实现实时告警

这里有几个需要注意的,就是alert.message,这个是仅仅获取告警内容,另外,报警类型选择脚本,脚本名称就是上面下载的那个脚本,我们重命名为dingding.py,那么这里就填入dingding.py即可。

接着,选择导航栏上面的“管理”,然后选择“用户”,可以在现有的用户下编辑,也可以新建用户,这里我们以管理员用户Admin为例,点击用户进入编辑页面,选择“报警媒介”,点击下面的添加按钮,添加一个报警类型为“钉钉告警”,如下图所示:

Zabbix通过与微信、钉钉整合实现实时告警

这里需要注意这个“收件人”的设置,这个收件人输入“all”即可,这样,钉钉群下面的成员都能收到告警信息了。

最后一步,是配置一个报警动作,点击导航栏上面的“配置”,然后选择“动作”,点击右上方事件源选择“触发器”,然后点击“创建动作”,如下图所示:

Zabbix通过与微信、钉钉整合实现实时告警

这里自定义一个动作名称,然后点击上面的“操作”按钮,如下图所示:

Zabbix通过与微信、钉钉整合实现实时告警

在这个界面下,“默认操作步骤持续时间”就选择默认的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}

最后的“操作”细节就按照上图的选择即可。这样,故障时发生告警信息配置完成,接着配置故障恢复后的信息发送格式,点击上面的“恢复操作”按钮,如下图所示:
Zabbix通过与微信、钉钉整合实现实时告警

在这个界面下,默认标题和消息内容模板可配置如下:

默认标题:

恢复{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通过与微信、钉钉整合实现实时告警

这个界面显示了告警日志是否发送成功,如果没有发送成功,可以看到具体的错误信息,然后根据错误排查即可。如果显示发送成功,那么我们的钉钉就能收到告警信息了,如下图所示:

Zabbix通过与微信、钉钉整合实现实时告警

这样,钉钉整合zabbix告警功能,成功实现。