zabbix设置钉钉告警(适用于4.0或5.0)
前提条件:
zabbix界面上可触发监控项的动作
以上触发器和监控项都没有问题。下面就进行告警设置。
一、设置好告警群组(这个添加三个以上人员算群组)
创建群聊,把需要收到报警的人员都拉到这个群
二、在群组里面添加通知机器人
设置好自定义关键字,如果设置的关键字不是告警,可能会造成通知不成功
以上是添加告警机器人的操作,复制好机器人的webhook路径。
三、查看zabbix-server脚本存放的位置:
[root@localhost local]# grep ^AlertScriptsPath /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts
四、进入脚本存放位置并创建告警脚本
[root@localhost local]# cd /usr/lib/zabbix/alertscripts/
[root@localhost alertscripts]# vim dingding.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
#说明:以下脚本只要将webhook改为你自己的webhook值即可,其它的不需要改变。
import requests,json,sys,os,datetime
webhook="https://oapi.dingtalk.com/robot/send?access_token=87297f7e3f37bad7f60387f13d6b84374068dbd7d5e05585eae72f91fc3738ea" #替换成自己群组里的机器人webhook路径
user=sys.argv[1]
#发给钉钉群中哪个用户
text=sys.argv[3]
#发送的报警内容
data={
"msgtype": "text",
"text": {
"content": text
},
"at": {
"atMobiles": [
user
],
"isAtAll": False
}
}
#钉钉API固定数据格式
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()
五、给告警脚本执行权限,并创建所需的日志文件
[root@localhost alertscripts]# chmod +x dingding.py
[root@localhost alertscripts]# touch /var/log/zabbix/dingding.log
[root@localhost alertscripts]# chown zabbix.zabbix /var/log/zabbix/dingding.log
六、手动测试发送告警消息(看看群组是否能手收到)
六.1 手动发送告警信息,需要在群组里随便找一个联系人的钉钉号
在群组里随便点击一个人
右击就可以复制这个钉钉号
复制完成后使用下面的测试命令进行测试
[root@localhost alertscripts]# ./dingding.py #群组里一个人员的钉钉号 test "这是条告警测试信息,请忽略"
3)test:这里因脚本中没有设置接收参数,所以无实际意义,仅仅起到变量占位的作用。
4)“这是条告警测试信息,请忽略”:这是具体的告警信息,告警信息必须包含“安全设置”
发送的时候可能会报下面的错误,这个是因为python版本没有模块导致
注意:该脚本要求至少python2.6.6版本,且具有requests模块,否则会报如下错误:
Traceback (most recent call last):
File "./dingding.py", line 4, in <module>
import requests,json,sys,os,datetime
ImportError: No module named requests
解决办法如下:
yum install python-pip -y
pip install --upgrade pip
pip install requests
七、信息能手动发送成功后,接下来就是在zabbix界面上设置报警媒介
添加钉钉报警媒介,类型选择脚本、脚本名称一定是服务器里面的告警脚本的名称,添加上脚本参数、选择已启用、点击添加即可
脚本参数:
{ALERT.SENDTO}
#对应脚本中的,user=sys.argv1。
{ALERT.SUBJECT}
#代表发送的信息的标题,在"报表"的"动作日志"中可以看到。
{ALERT.MESSAGE}
#对应脚本中的,text=sys.argv3。
八、接下来就是在zabbix界面上设置告警触发动作
因为钉钉告警我之前是做过的,所以会在动作里显示出来。 但按照步骤操作也是没有问题
设置动作名称--------先设置两个条件后,计算方式才会出现选择------------计算方式按照个人公司需求进行修改即可------------选择已启用
点击操作-----选择添加(因为我之前做过,所以不用在意现有的)
在操作细节里面设置操作类型-----------告警通知的组-----------通知的用户------选择仅钉钉发送------------编写告警信息主题等内容
用户可根据自己的用户和用户群组进行添加
设置告警主题:
服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
设置告警消息:
服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
{
告警主机:{HOST.NAME}
告警IP:{HOST.IP}
告警信息:{TRIGGER.NAME}
告警项目:{ITEM.NAME}
告警时间:{EVENT.DATE}_{EVENT.TIME}
当前状态:故障 值={ITEM.VALUE}
故障已持续{EVENT.AGE},请尽快处理!!
事件ID:{EVENT.ID}
}
设置完成后,点击添加即可
再设置恢复操作的信息
恢复动作细节跟告警其实是差不多的
操作类型也是选择发送信息----------选择通知的用户群组---------选择通知用户----选择仅发送到钉钉------填写完恢复主题及内容
用户可根据自己的用户和用户群组进行添加
恢复主题:
服务器:{HOST.NAME}: {TRIGGER.NAME}已恢复!
恢复信息:
服务器:{HOST.NAME}: {TRIGGER.NAME}已恢复!
{
恢复主机:{HOST.NAME}
恢复IP:{HOST.IP}
恢复信息:{TRIGGER.NAME}
恢复项目:{ITEM.NAME}
告警时间:{EVENT.DATE}{EVENT.TIME}
恢复时间:{EVENT.RECOVERY.DATE}{EVENT.RECOVERY.TIME}
当前状态:{TRIGGER.STATUS} 值={ITEM.VALUE}
故障共持续{EVENT.AGE}
事件ID:{EVENT.ID}
}
设置完成后添加添加即可
九、设置用户通知
用户通知可以根据自己现有的用户进行告警通知设置

设置完成后,找一台机器触发告警,并测试告警通知是否生效