群机器人是钉钉群的高级扩展功能,群机器人支持Webhook协议的自定义接入,支持更多可能性。相比使用邮件报警,钉钉机器人报警比较及时,因为内部就用钉钉进行工作,移动端和电脑端都能时刻察觉,而且还没有限制发送消息的数量,今天我们就来讲一讲如何通过钉钉告警机器人实现zabbix钉钉告警。
1、钉钉自定义机器人
首先我们登陆钉钉PC客户端(这里必须是PC客户端才可以创建钉钉机器人哦)、创建一个钉钉群、并点击右上角群设置-智能群助手-添加机器人-自定义、添加自定义机器人(这里我们需要通过自定义机器人才能拿到Webhook接口)。如下图:
这里机器人的名字可以随意定义、我们需要把zabbix服务器的IP地址(公网IP)输入IP地址栏(这里类似白名单功能、只有添加了IP的服务器才能和该webhook通信),填写完成以后我们点击完成,就可以拿到钉钉机器人的webhook地址了:https://oapi.dingtalk.com/robot/send?access_token=888099b8e3997939004eac786cfa1654d6b5d8ded34de2269057e9c106eac109。
2、创建告警文件
我们通过python(Python需要requests模块支持,没有的小伙伴请自行安装)把zabbix的告警信息传递给钉钉机器人webhook地址,然后把告警信息推送到钉钉群。
在创建告警文件之前一定要去查看zabbix_server.conf配置文件、确认告警脚本目录路径并已经配置(如果没有配置可以直接配置上去、然后重启zabbix即可,详细配置参考下图),我这里的告警脚本目录路径是:/usr/lib/zabbix/alertscripts,然后我们去该目录下创建一个dignding.py文件、并插入下面的代码。下面为示例代码,当然我们也可以去钉钉机器人官方文档查看更详细的接口文档和更多用法。钉钉开发文档地址:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq:
#!/usr/bin/env 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=888099b8e3997939004eac786cfa1654d6b5d8ded34de2269057e9c106eac109"
def msg(text):
json_text = {
"msgtype": "text",
"text": {
"content": text
},
"at": {
"atMobiles": [
"156xxxx8827",
],
"isAtAll": False
}
}
print(requests.post(api_url, json.dumps(json_text), headers=headers).content)
if __name__ == '__main__':
text = sys.argv[1]
msg(text)
完成之后我们通过 chmod +x dignding.py 命令给该文件授权,然后通过./dingding.py test 命令测试一下脚本是否正常,脚本如果正常我们会在钉钉群接收到一条信息。
3、创建媒体类型
下面我们就可以去zabbix中创建媒体类型了,在管理-创建媒体类型创建名为钉钉告警的报警媒介类型:
这里的脚本名称我们就写刚才创建的脚本名称dignding.py、钉钉会自动去读取告警目录下面的脚本名称(一定要确认zabbix_server.conf中的脚本告警目录);脚本参数直接添加{ALERT.MESSAGE}即可:
4、用户指定媒介类型
我们去zabbix中为用户指定媒介类型,在管理-用户管理里面点击Admin管理员账号、进入用户-报警媒介添加报警媒介,类型选择我们刚才创建的钉钉告警:
5、告警动作配置
上面的操作完成以后我们就可以去配置告警动作了、点击配置-动作-创建动作;告警动作可以是操作动作(故障动作)、恢复操作(故障恢复),更新操作(故障更新),这里我们一项一项配置:
填写操作动作默认标题:
故障告警: {EVENT.NAME}
填写消息内容:
告警主机: {HOSTNAME1}
告警主机IP地址:{HOST.CONN}
告警时间: {EVENT.DATE} {EVENT.TIME}
告警等级: {TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目: {TRIGGER.KEY1}
问题详情: {ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID: {EVENT.ID}
添加具体操作,这里我们选择操作类型为发送消息,发送到用户群组为管理员用户群组(不建议,如果群组下面有多个用户、钉钉告警消息会发送多条),当然你也可以选择直接发送到具体用户(建议),仅送到选择为钉钉告警,然后先点击操作细节里面的添加,在点击外面的添加(不然有一些粗心大意的同学会想怎么一直添加不上,比如说我自己,嘿嘿):
上面我们只展示了操作动作(故障动作);恢复操作(故障恢复)和更新操作(故障更新)配置和具体内容与操作动作(故障动作)都是相同的,这里就不再详细介绍了,请同学们自行举一反三哦。到这里zabbix4.4配置钉钉告警所有的配置项全部已经完成了 、下面我们来看一下实际效果(这里可以自己去配置模板里面修改一下触发器的参数、看看钉钉能不能接收到zabbix发出的告警信息)。