zabbix钉钉告警设置
群机器人是钉钉群的高级扩展功能,群机器人支持Webhook协议的自定义接入,支持更多可能性. 比如我们可将Zabbix运维报警提醒通过自定义机器人聚合到钉钉群中,以实现钉钉告警。下面记录下Zabbix通过钉钉告警的设置过程:
一. 钉钉机器人创建
登录钉钉客户端,创建一个群,把需要收到报警信息的人员都拉到这个群内.然后点击群右上角的"群机器人"->"添加机器人"->"自定义",记录该机器人的webhook值!
二.编写脚本
我的zabbix server的配置文件在/usr/local/zabbix-server/etc/zabbix_server.conf,在此文件中找到shell文件的路径,相关的配置shell文件拷贝到此目录下
[[email protected] alertscripts]# cat /usr/local/zabbix-server/etc/zabbix_server.conf | grep alertscripts
# AlertScriptsPath=${datadir}/zabbix/alertscripts
[[email protected] alertscripts]# pwd
/usr/local/zabbix-server/share/zabbix/alertscripts
钉钉告警的脚本如下:(一个是用脚本语言编写,一个是用python脚本编写,采用其中的一个即可,输入的参数不一样。此次采用脚本语言做配置)
cat post.sh
#!/bin/bash
header="Content-Type: application/json;charset=utf-8"
url="https://oapi.dingtalk.com/robot/send?access_token=9e16c7xxxx"
txt='{
"msgtype":"text",
"text":{
"content":"'$1'"
},
"at":{
"atMobiles":["'$2'"],
"isAtAll":false
}
}'
curl -X POST "${url}" -H "${header}" -d "${txt}"
cat dingding.py
代码如下:
#!/usr/bin/env python
#coding:utf-8
#zabbix钉钉报警
import requests,json,sys,os,datetime
webhook="https://oapi.dingtalk.com/robot/send?access_token=9exxxxxa8c0bef"
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("/usr/local/zabbix/logs/dingding.log"):
f=open("/usr/local/zabbix/logs/dingding.log","a+")
else:
f=open("/usr/local/zabbix/logs/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()
chown zabbix:zabbix post.sh
chown zabbix:zabbix dingding.py
上述两个文件赋予执行权限。
测试:./post.sh waninthisisaest 13661196xxx
./dingding.py test 13661196xxx "这个条测试信息,忽略"
如果能收到消息,表示脚本没有问题。
三 界面配置
1. 配置脚本administrator->Media types,注意脚本的名称一定和上面一致。
2 配置用户