https://cloud.tencent.com/developer/article/1842957
需求:
Zabbix告警通知发送到钉钉群组
钉钉报警时基于zabbix,访问钉钉应用接口去推送的报警消息,所以我们需要一个在钉钉创建一个报警应用。
版本:
Zabbix:4.0.7
Python:2.7.5
一、钉钉配置
1、创建群组、添加告警机器人
钉钉的聊天界面,点击发起群聊:
钉钉要3个人才能建群,所以需要添加两个人即可。
2、点击群设置 → 智能群助手 → 添加更多 → 添加机器人 → 自定义 :
点击添加,输入机器人名字即可
生成了一个 webhook ,先复制,后面会用到。
二、zabbix配置
1、创建脚本
vi /etc/zabbix/zabbix_server.conf
:/alertscripts 找到这一行(alertscripts是zabbix-server自定义脚本的目录,所有自定义的脚本都放在此处)
cd /usr/lib/zabbix/alertscripts/
vi dingding.py
#!/usr/bin/python # -*- coding: utf-8 -* import requests import json import sys import os import datetime #webhook = "https://xxxxxxxxxx" 钉钉机器人擎天柱的webhook地址 #第一个参数应该是收件人,更换成了机器人地址 #第二个参数应该是主题,更换成了收件人 #第三个参数是消息 #具体参数设置在zabbix报警媒介类型 webhook=sys.argv[1] user=sys.argv[2] text=sys.argv[3] data={ "msgtype":"text", "text":{ "content":text }, "at":{ "atMobiles":[ user ], "isAtAll":True #"isAtAll": True 发送给群里面的所有人(不想让其他人收到报警这里填False即可) } } headers={'Content-Type':'application/json'} x=requests.post(url=webhook,data=json.dumps(data),headers=headers) #if os.path.exists("/usr/lib/zabbix/alertscripts/dingding.log"): # f=open("/usr/lib/zabbix/alertscripts/dingding.log","a+") #else: # f=open("/usr/lib/zabbix/alertscripts/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()
:wq保存退出
chmod 755 dingding.py
手动测试是否能发消息到钉钉
./dingding.py “ERROR could not found java-scripts”
注意这里的内容包含了钉钉自定义的关键词ERROR,如果没有关键词你是发不过去的
三、Zabbix web界面设置
1、添加报警脚本到zabbix:
步骤:管理——报警媒介类型——创建报警媒介类型——更新
Problem: {EVENT.NAME}
Problem started at {EVENT.TIME} on {EVENT.DATE}
Problem name: {EVENT.NAME}
Host: {HOST.NAME}
Severity: {EVENT.SEVERITY}
Operational data: {EVENT.OPDATA}
Original problem ID: {EVENT.ID}
{TRIGGER.URL}
2、配置用户
收件人填写钉钉群机器人的Webhook地址
3、创建动作:配置>>动作
操作:
默认标题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME} 故障!
消息内容:
告警主机: {HOSTNAME1}
主机地址: {HOST.IP}
告警等级: {TRIGGER.SEVERITY}
监控项目: {TRIGGER.KEY1}
问题详情: {ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}: {ITEM.VALUE1}
告警信息: {TRIGGER.NAME}
告警时间: {EVENT.DATE} {EVENT.TIME}
事件ID: {EVENT.ID}
恢复操作:
默认标题:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME} 已恢复!
消息内容:
告警主机: {HOSTNAME1}
主机地址: {HOST.IP}
告警等级: {TRIGGER.SEVERITY}
监控项目: {TRIGGER.KEY1}
问题详情: {ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}: {ITEM.VALUE1}
告警信息: {TRIGGER.NAME}
告警时间: {EVENT.DATE} {EVENT.TIME}
事件ID: {EVENT.ID}
4、进行钉钉报警测试
[root@JDCloud_Server alertscripts]# python dingding.py Test测试 132xxxx