Zabbix 監控服務端、客戶端都已經部署完成,被監控主機已經添加,Zabbix 監控運行正常。那么接下來我們就要考慮如果出現故障的時候報警機制了
選擇做為報警的第三方有很多,比如釘釘、郵件、企業微信、QQ群等等...
在Zabbix服務端設置報警,當被監控主機宕機或者達到觸發器預設值時,會自動發送報警到指定第三方報警軟件
釘釘群機器人是釘釘群的高級擴展功能,釘釘群機器人支持Webhook協議的自定義接入,支持更多可能性. 比如我們可將Zabbix運維報警提醒通過自定義機器人到釘釘群中,以實現釘釘告警
本文就記錄一下Zabbix報警到釘釘群的過程:
創建釘釘機器人
打開電腦登錄釘釘客戶端,創建一個zabbix報警群,把需要收到報警信息的人員都拉到這個群內.然后點擊群右上角的 群機器人>添加機器人>自定義, 記錄該機器人的webhook值!

這是已經添加好的機器人,添加的時候會讓你設置圖上的 Webhook 保存好就行
Zabbix腳本設置
開啟zabbix腳本路徑: [root@Mike_Node-1 /application/zabbix/etc]# [root@Mike_Node-1 /application/zabbix/etc]# cat /application/zabbix/etc/zabbix_server.conf|grep AlertScriptsPath ### Option: AlertScriptsPath AlertScriptsPath=/application/zabbix/share/zabbix/alertscripts ####開啟報警腳本路徑 [root@Mike_Node-1 /application/zabbix/etc]# [root@Mike_Node-1 /application/zabbix/etc]# 編寫報警python腳本: [root@Mike_Node-1 /application/zabbix/etc]# [root@Mike_Node-1 /application/zabbix/etc]# cd /application/zabbix/share/zabbix/alertscripts/ [root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# vim 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=566221303300d1eb8c861151" ###釘釘群機器人webhook #user=sys.argv[1] 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("/application/zabbix/logs/dingding.log"): f=open("/application/zabbix/logs/dingding.log","a+") else: f=open("/application/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@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# [root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# 創建腳本日志和賦予權限: [root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# touch /application/zabbix/logs/dingding.log [root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# chown zabbix.zabbix /application/zabbix/logs/dingding.log [root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# chown zabbox.zabbix dingding.py && chmod 755 dingding.py [root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# 手動測試腳本發信息是否正常 ## 1854151165 這個是你在釘釘群里聯系人的手機號碼: [root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# [root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# ./dingding.py test 1854151165 "zabbix報警" =========================================================== 注意:該腳本要求至少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@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# yum install python-pip [root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# pip -v [root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# pip install requests
釘釘報警群查看測試通知:

如果收到這條信息證明這個腳本已經可以連通到你的釘釘群了,如果還是不通再重頭檢查一下配置
zabbix監控界面設置:
1.創建報警媒介
登錄到界面然后依次點開 管理>報警媒介類型>創建媒體類型 其他配置如下

腳本名稱和腳本參數一定不要寫錯,不然可能會導致觸發不了報警
腳本名稱:dingding.py
腳本參數:參數
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
2.添加用戶報警媒介
收件人是釘釘上的手機號碼.這里使用Admin管理員用戶,在Admin用戶的"報警媒介"里添加收件人信息 特別注意:這里只需要添加釘釘群里的任何一個成員的手機號碼即可,即添加一個收件人,這樣在機器人群里成員都能看到告警信息. 如果添加多個收件人,則機器人群里就會發送多個告警信息,一個收件人發一條信息
登錄到界面然后依次點開 管理>用戶>Admin>報警媒介>添加

添加完就好了,收件人這里可以寫多個但是一定是在釘釘群里的群員
3.創建動作
動作里的報警信息和恢復信息都發送給Admin用戶
登錄到界面然后依次點開 配置>動作>創建動作

我這里的條件是選擇 阿里雲機器 主機群組出現問題才觸發,你們可以看情況修改


這是操作和恢復操作的一些格式
#####操作信息 默認接收人:服務器:{HOST.NAME}發生故障 默認信息: 服務器:{HOST.NAME}發生故障! 告警主機:{HOST.NAME} 告警地址:{HOST.IP} 告警等級:{TRIGGER.SEVERITY} 當前狀態:{TRIGGER.STATUS} 告警信息:{TRIGGER.NAME} 告警時間:{EVENT.DATE}{EVENT.TIME} 事件ID:{EVENT.ID} #####恢復操作信息 默認接收人:服務器:{HOST.NAME}已恢復 默認信息: 服務器:{HOST.NAME}已恢復 告警主機:{HOST.NAME} 告警地址:{HOST.IP} 告警等級:{TRIGGER.SEVERITY} 當前狀態:{TRIGGER.STATUS} 告警信息:{TRIGGER.NAME} 告警時間:{EVENT.DATE}{EVENT.TIME} 恢復時間:{EVENT.RECOVERY.DATE}{EVENT.RECOVERY.TIME} 持續時間:{EVENT.AGE} 事件ID:{EVENT.ID}
4.設置釘釘機器人關鍵詞
因為釘釘關鍵詞一定要設置才可以使用,這里我用到了自定義關鍵詞、里面的關鍵詞和我動作里的操作信息和恢復信息有關聯就可以報警了
你也可以使用加簽和IP段,看官方文檔結合就可以
打開釘釘群>點擊機器人>機器人設置>安全設置

我這里的關鍵詞都和動作里的操作信息有關聯,每次報警都會有~所以才會觸發,要是報警信息里沒這些關鍵詞釘釘機器人是不會發送到群里的哦~切記 !!!
5.測試報警是否生效
把監控主機的一台服務器上的端口關閉查看是否報警到釘釘群里,我測試的如下:

6.查看日志
我們也可以在Linux上查看日志到底有沒有發送或者腳本執行的結果
[root@Mike_Node-1 /application/zabbix/logs]# [root@Mike_Node-1 /application/zabbix/logs]# cat dingding.log ------------------------------------------------------------ 2020-09-07 20:03:58.215649 1854151165 發送成功 服務器:測試服務器-51.51.45.884已恢復 告警主機:測試服務器-51.51.45.884 告警地址:51.51.45.884 告警等級:Disaster 當前狀態:OK 告警信息:8080端口停止 告警時間:2020.09.07 20:03:25 恢復時間:2020.09.07 20:03:55 持續時間:0m 事件ID:6408 [root@Mike_Node-1 /application/zabbix/logs]#
好了最終釘釘報警已經完成,這樣Zabbix出現故障就會報警通知到釘釘群里,相關人員就會第一時間發現,減少生產線上的損失
本文分享完畢,感謝支持點贊~~
