群機器人是釘釘群的高級擴展功能,群機器人可以將第三方服務的信息聚合到群聊中,實現自動化的信息同步。例如:通過聚合GitHub,GitLab等源碼管理服務,實現源碼更新同步;通過聚合Trello,JIRA等項目協調服務,實現項目信息同步。不僅如此,群機器人支持Webhook協議的自定義接入,支持更多可能性. 比如我們可將Zabbix運維報警提醒通過自定義機器人聚合到釘釘群中,以實現釘釘告警。下面記錄下Zabbix通過釘釘告警的設置過程:
一. 釘釘機器人創建
登錄釘釘客戶端,創建一個群,把需要收到報警信息的人員都拉到這個群內.然后點擊群右上角的"群機器人"->"添加機器人"->"自定義",記錄該機器人的webhook值!

二. Zabbix設置
[root@zabbix01 ~]# cat /usr/local/zabbix/etc/zabbix_server.conf|grep AlertScriptsPath
AlertScriptsPath=/usr/local/zabbix/monitor_scripts
登錄到/usr/local/zabbix/monitor_scripts下編寫dingding.py腳本(腳本中包含釘釘機器人的webhook值):
[root@zabbix01 ~]# cd /usr/local/zabbix/monitor_scripts/
[root@zabbix01 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?**********************************************"
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()
創建上面腳本中的日志路徑:
[root@zabbix01 monitor_scripts]# touch /usr/local/zabbix/logs/dingding.log
[root@zabbix01 monitor_scripts]# chown zabbix.zabbix dingding.py
[root@zabbix01 monitor_scripts]# chmod 755 dingding.py
[root@zabbix01 monitor_scripts]# chown zabbix.zabbix /usr/local/zabbix/logs/dingding.log
手動測試腳本發信是否正常:
這個條文檔記錄的測試信息,忽略
[root@zabbix01 monitor_scripts]# ./dingding.py test 13611027803 "這個條測試信息,忽略"
===========================================================
注意:該腳本要求至少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
解決辦法:
[root@zabbix01 monitor_scripts]# yum install python-pip
[root@zabbix01 monitor_scripts]# pip -v
[root@zabbix01 monitor_scripts]# pip install requests
===========================================================
釘釘上收到的測試信息如下:

三. Zabbix監控界面設置
1) 創建報警媒介. 三個參數分別是:ALERT.SENDTO ALERT.SUBJECT ALERT.MESSAGE

2) 用戶添加報警媒介
收件人是釘釘上的手機號碼.這里使用Admin管理員用戶,在Admin用戶的"報警媒介"里添加收件人信息
特別注意:這里只需要添加釘釘群里的任何一個成員的手機號碼即可,即添加一個收件人,這樣在機器人群里成員都能看到告警信息.
如果添加多個收件人,則機器人群里就會發送多個告警信息,一個收件人發一條信息.

3) 添加動作
動作里的報警信息和恢復信息都發送給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}



然后進行測試,比如關閉一台被監控機器的10050端口,過一會兒,查看下釘釘上的報警信息,如下:


還可以查看dingding.log日志,看看告警信息發送情況:

