文章目录
背景信息
在之前的系列文章中,我介绍两种不同的告警方式,大家可以参考如下传送门:
Zabbix监控系统系列之六:EMAIL警告配置
Zabbix监控系统系列之十六:企业微信告警
EMAIL方式与企业微信都有一定局限性,比如企业邮箱没法通过手机查收(我们公司就是如此),企业微信告警信息过於单调等。阿里钉钉灵活度比起前两者会更具备优势一些。
钉钉配置
1. 钉钉机器人配置
在钉钉客户端针对一个群组增加自定义机器人获得webhook字符串:
2. 钉钉脚本配置[此步骤在Zabbix Server配置]
cd /usr/lib/zabbix/alertscripts
vi dingding.py
---dingding.py脚本开始---
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
import time
headers = {'Content-Type': 'application/json;charset=utf-8'}
time=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
log_file = "/var/log/dingding.log"
api_url = "https://oapi.dingtalk.com/robot/send access_token=09191748ebe131055fae62f154ea5399a256ccc80a05bb22d8d4ef8f90b557b8" #说明:这里改为自己创建的机器人的webhook的值
def log(info):
#注意权限,否则写不进去日志
if os.path.isfile(log_file) == False:
f = open(log_file, 'a+')
f = open(log_file,'a+')
f.write(info)
f.close()
def msg(text,user):
json_text= {
"msgtype": "markdown",
"markdown": {
"title":"zabbix monitor",
"text": text
},
"at": {
"atMobiles": [
user
],
"isAtAll": True
}
}
r=requests.post(api_url,data=json.dumps(json_text),headers=headers).json()
code = r["errcode"]
if code == 0:
log(time + ":消息发送成功 返回码:" + str(code) + "\n")
else:
log(time + ":消息发送失败 返回码:" + str(code) + "\n")
exit(3)
if __name__ == '__main__':
text = sys.argv[3]
user = sys.argv[1]
msg(text,user)
---dingding.py脚本结束---
# 脚本授权配置
chmod +x dingding.py
touch /var/log/dingding.log
chmod 777 /var/log/dingding.log
3. Zabbix告警媒介配置
名称:Dingding
类型:脚本
脚本名称:dingding.py
脚本参数:{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}
4. Zabbix用户报警媒介配置
类型:Dingding
收件人:(随意的,脚本不关心此字段)
当启用时:设置时间窗
如果存在严重性则使用:设置告警级别
5. Zabbix告警动作设置
针对钉钉告警设置专门的告警动作,其中告警操作与恢复操作可以参考如下:
<font color=#FF0000 size=6 face="黑体">监控告警通知</font>
------
**主机名称:** {HOSTNAME1}
**告警名称:** {TRIGGER.NAME}
**告警级别:** {TRIGGER.SEVERITY}
**告警时间:** {EVENT.DATE} {EVENT.TIME}
**检查项:** {TRIGGER.KEY1}
**当前值:** {ITEM.LASTVALUE}
**IP地址:** {HOST.IP}
**事件ID:** {EVENT.ID}
<font color=#006400 size=6 face="黑体">监控恢复通知</font>
------
**主机名称:** {HOSTNAME1}
**告警名称:** {TRIGGER.NAME}
**告警级别:** {TRIGGER.SEVERITY}
**告警时间:** {EVENT.DATE} {EVENT.TIME}
**恢复时间:** {EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
**故障时长:** {EVENT.AGE}
**检查项:** {TRIGGER.KEY1}
**当前值:** {EVENT.RECOVERY.VALUE}
**IP地址:** {HOST.IP}
**事件ID:** {EVENT.ID}
常见问题
- 如果出现1条钉钉告警信息重复出现多次时,请检查脚本关联的日志文件是否授权正确。