我们在钉钉上建立群聊,然后在群聊上添加钉钉机器人:
编写,脚本需要放在zabbix 的alertscripts目录下(如果不知道该目录的位置,可以使用find命令查找)
find / -iname alertscripts
脚本
vim /usr/local/zabbix/alertscripts/dingding.py #!/usr/bin/env python #coding:utf-8 #zabbix钉钉报警 import requests,json,sys,os,datetime webhook="上面创建钉钉机器人的webhook地址" user=sys.argv[1] text=sys.argv[3] data={ "msgtype": "text", "text": { "content": text }, "at": { "atMobiles": [ user ], "isAtAll": False } } headers = {'Content-Type': 'application/json'} x=requests.post(url=webhook,data=json.dumps(data),headers=headers) if os.path.exists("/tmp/zabbix_dingding.log"): f=open("/tmp/zabbix_dingding.log","a+") else: f=open("/tmp/zabbix_dingding.log","w+") f.write("\n"+"--"*30) if x.json()["errcode"] == 0: f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送成功"+"\n"+str(text)) f.close() else: f.write("\n"+str(datetime.datetime.now()) + " " + str(user) + " " + "发送失败" + "\n" + str(text)) f.close()
脚本创建的时候最好在服务器端新建,不要在windows主机上创建完后再上传到服务器上,很有可能出现无法调用脚本的问题(在服务器上能使用脚本发送测试信息,log日志也可以看到,但是zabbix server 无法调用脚本,动作日志看已经发送,但钉钉收不到信息,log日志也查看不到该信息),我猜测可能是windows和Linux的编码问题
脚本和log授权
chmod +x /usr/local/zabbix/alertscripts/dingding.py chown zabbix.zabbix /usr/local/zabbix/alertscripts/dingding.py chmod +x /tmp/zabbix_dingding.log chown zabbix.zabbix /tmp/zabbix_dingding.log
操作
默认接收人 :
服务器:{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} }
日子查看
[root@JumpFency alertscripts]# more /tmp/zabbix_dingding.log