分散式監控系統Zabbix3.4-釘釘告警配置記錄

散盡浮華發表於2018-09-03

 

群機器人是釘釘群的高階擴充套件功能,群機器人可以將第三方服務的資訊聚合到群聊中,實現自動化的資訊同步。例如:通過聚合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?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()


建立上面指令碼中的日誌路徑:
[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日誌,看看告警資訊傳送情況:

 

相關文章