zabbix监控,实现指定的监控内容,进行钉钉告警推送。
流程:
- 钉钉机器人获取webhook及zabbix告警字段
- server上配置钉钉告警脚本
- 管理项-添加告警媒介,并赋予给用户(用户添加报警媒介“钉钉告警”)
- 配置项-添加动作(监控项状态通过钉钉发送告警)
- 测试
第一步,钉钉机器人获取webhook及zabbix告警字段
关于创建钉钉机器人,我前面文章有写,或者自行百度也可以
第二步,server上配置钉钉告警脚本
python脚本,需安装python及requests模块
1 2 3 4
| #安装epel源 yum -y install epel-release #安装python及依赖模块 yum -y install python && yum -y install python-pip && pip install requests
|
查看zabbix-server脚本路径:
1
| grep ^AlertScriptsPath /etc/zabbix/zabbix_server.conf
|
(我的查询:/usr/lib/zabbix/alertscripts)
在此目录下创建钉钉脚本:
1
| vi /usr/lib/zabbix/alertscripts/dingding.py
|
脚本内容如下:
- 注意:第1行,查看你的python路径是否一致
- 注意:第5行,改为你的webhook路径
- 注意:第18行,发消息是@所有人还是只@配置的消息发送人
- 注意:dingding.log文件,需提前创建!或者改为自己的log路径
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #!/usr/bin/python #coding:utf-8 import requests,json,sys,os,datetime # 机器人的Webhook地址 webhook="你的钉钉webhook" user=sys.argv[1] text=sys.argv[3] data={ "msgtype": "text", "text": { "content": text }, "at": { "atMobiles": [ # 在web端用户绑定媒介中通过指定用户注册是的手机号,可以通知指定人员,否则只发消息,不艾特具体人 user ], "isAtAll": 1 # 设置为1,则@所有人 # "isAtAll": 1 # 设置为0,则@一个人 # "isAtAll": 0 } } headers = {'Content-Type': 'application/json'} x=requests.post(url=webhook,data=json.dumps(data),headers=headers) if os.path.exists("/var/log/zabbix/dingding.log"): f=open("/var/log/zabbix/dingding.log","a+") else: f=open("/var/log/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()
|
创建dingding.log日志文件
1 2 3 4
| #创建dingding.log touch/var/log/zabbix/dingding.log #授权给zabbix chown zabbix:zabbix /var/log/zabbix/dingding.log
|
测试dingding.py
1 2 3 4
| #添加执行权限 chmod +x /usr/lib/zabbix/alertscripts/dingding.py #测试 /usr/lib/zabbix/alertscripts/dingding.py 《钉钉用户名或手机号》test "《带关键字的消息》"
|
脚本测试没问题,日志和钉钉都查看到消息,ok。
第三步:管理项-添加告警媒介,并赋予给用户
登录web管理,管理项添加钉钉告警媒介
添加报警媒介类型:
1 2 3 4 5 6 7 8 9
| 脚本参数: #对应脚本中的,user=sys.argv[1](发给钉钉群中哪个用户)。 {ALERT.SENDTO}
#代表发送的信息的标题,在"报表"的"动作日志"中可以看到。 {ALERT.SUBJECT}
#对应脚本中的,text=sys.argv[3](发送的报警内容)。 {ALERT.MESSAGE}
|
添加消息模板:消息模板中加入你钉钉的“关键字”
通过web平台测试:钉钉媒介
用户并赋予钉钉告警媒介权限,选择默认管理员
第四步,配置项-添加动作
添加“操作”
实现效果:监控项发生改变将发送消息给admin赋值的媒介消息。
测试:
我这个教程中,监控项是nginx的存活状态
当监控的主机nginx停止和恢复时,钉钉收到的消息