一、创建钉钉机器人

登录钉钉客户端,创建一个群,把需要收到报警信息的人员都拉到这个群内.然后点击群右上角的"群机器人"->"添加机器人"->"自定义",记录该机器人的webhook值!

zabbix3.0配置钉钉告警_第1张图片

二、zabbix设置

  1. 查看alertscripts存放路径
cat /usr/local/zabbix/etc/zabbix_server.conf|grep AlertScriptsPath
AlertScriptsPath=/usr/local/zabbix/monitor_scripts
  1. 编写dingding.py脚本,Python版本必须为2.7,不然报错:
cd /usr/local/zabbix/monitor_scripts/

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=95a25d8b8f0945ecd0f0ac992f4be80d3f738ded0acb199ff356426e70fca675"
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()
  1. 创建上面脚本中的日志路径:
touch /usr/local/zabbix/logs/dingding.log
chown zabbix.zabbix dingding.py
chmod 755 dingding.py
chown zabbix.zabbix /usr/local/zabbix/logs/dingding.log
  1. 手动测试脚本发信是否正常:
./dingding.py test 13611027803 "这是一条测试信息,忽略"

注意:该脚本要求至少python2.6.6版本,且具有requests模块.

否则会报错:

Traceback (most recent call last):
  File "./dingding.py", line 4, in 
    import requests,json,sys,os,datetime
ImportError: No module named requests

解决办法:

pip install requests

钉钉上收到的测试信息如下:

zabbix3.0配置钉钉告警

三、Zabbix监控界面设置

  1. 创建报警媒介. 三个参数分别是:ALERT.SENDTO ALERT.SUBJECT ALERT.MESSAGE

zabbix3.0配置钉钉告警_第2张图片

  1. 用户添加报警媒介

收件人是钉钉上的手机号码.这里使用Admin管理员用户,在Admin用户的"报警媒介"里添加收件人信息
特别注意:这里只需要添加钉钉群里的任何一个成员的手机号码即可,即添加一个收件人,这样在机器人群里成员都能看到告警信息.
如果添加多个收件人,则机器人群里就会发送多个告警信息,一个收件人发一条信息.

zabbix3.0配置钉钉告警_第3张图片

  1. 添加动作

动作里的报警信息和恢复信息都发送给Admin用户.

操作
默认接收人:{TRIGGER.STATUS}: {TRIGGER.NAME}
默认信息:
告警主机:{HOST.NAME}
主机IP: {HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID: {EVENT.ID}

恢复操作(确认操作也是一样):
默认接收人:{TRIGGER.STATUS}: {TRIGGER.NAME}
默认信息:
告警主机:{HOST.NAME}
主机IP: {HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID: {EVENT.ID}

zabbix3.0配置钉钉告警_第4张图片

zabbix3.0配置钉钉告警_第5张图片

然后进行测试,比如关闭一台被监控机器的10050端口,过一会儿,查看下钉钉上的报警信息,如下:

zabbix3.0配置钉钉告警_第6张图片

还可以查看dingding.log日志,看看告警信息发送情况:

zabbix3.0配置钉钉告警_第7张图片

参考:https://blog.51cto.com/m51cto/2051945