文章目錄
背景信息
在之前的系列文章中,我介紹兩種不同的告警方式,大家可以參考如下傳送門:
Zabbix監控系統系列之六:EMAIL警告配置
Zabbix監控系統系列之十六:企業微信告警
EMAIL方式與企業微信都有一定侷限性,比如企業郵箱沒法通過手機查收(我們公司就是如此),企業微信告警信息過於單調等。阿里釘釘靈活度比起前兩者會更具備優勢一些。
釘釘配置
1. 釘釘機器人配置
在釘釘客戶端針對一個羣組增加自定義機器人獲得webhook字符串:
2. 釘釘腳本配置[此步驟在Zabbix Server配置]
cd /usr/lib/zabbix/alertscripts
vi dingding.py
---dingding.py腳本開始---
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
import time
headers = {'Content-Type': 'application/json;charset=utf-8'}
time=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
log_file = "/var/log/dingding.log"
api_url = "https://oapi.dingtalk.com/robot/send access_token=09191748ebe131055fae62f154ea5399a256ccc80a05bb22d8d4ef8f90b557b8" #說明:這裏改爲自己創建的機器人的webhook的值
def log(info):
#注意權限,否則寫不進去日誌
if os.path.isfile(log_file) == False:
f = open(log_file, 'a+')
f = open(log_file,'a+')
f.write(info)
f.close()
def msg(text,user):
json_text= {
"msgtype": "markdown",
"markdown": {
"title":"zabbix monitor",
"text": text
},
"at": {
"atMobiles": [
user
],
"isAtAll": True
}
}
r=requests.post(api_url,data=json.dumps(json_text),headers=headers).json()
code = r["errcode"]
if code == 0:
log(time + ":消息發送成功 返回碼:" + str(code) + "\n")
else:
log(time + ":消息發送失敗 返回碼:" + str(code) + "\n")
exit(3)
if __name__ == '__main__':
text = sys.argv[3]
user = sys.argv[1]
msg(text,user)
---dingding.py腳本結束---
# 腳本授權配置
chmod +x dingding.py
touch /var/log/dingding.log
chmod 777 /var/log/dingding.log
3. Zabbix告警媒介配置
名稱:Dingding
類型:腳本
腳本名稱:dingding.py
腳本參數:{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}
4. Zabbix用戶報警媒介配置
類型:Dingding
收件人:(隨意的,腳本不關心此字段)
當啓用時:設置時間窗
如果存在嚴重性則使用:設置告警級別
5. Zabbix告警動作設置
針對釘釘告警設置專門的告警動作,其中告警操作與恢復操作可以參考如下:
<font color=#FF0000 size=6 face="黑體">監控告警通知</font>
------
**主機名稱:** {HOSTNAME1}
**告警名稱:** {TRIGGER.NAME}
**告警級別:** {TRIGGER.SEVERITY}
**告警時間:** {EVENT.DATE} {EVENT.TIME}
**檢查項:** {TRIGGER.KEY1}
**當前值:** {ITEM.LASTVALUE}
**IP地址:** {HOST.IP}
**事件ID:** {EVENT.ID}
<font color=#006400 size=6 face="黑體">監控恢復通知</font>
------
**主機名稱:** {HOSTNAME1}
**告警名稱:** {TRIGGER.NAME}
**告警級別:** {TRIGGER.SEVERITY}
**告警時間:** {EVENT.DATE} {EVENT.TIME}
**恢復時間:** {EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
**故障時長:** {EVENT.AGE}
**檢查項:** {TRIGGER.KEY1}
**當前值:** {EVENT.RECOVERY.VALUE}
**IP地址:** {HOST.IP}
**事件ID:** {EVENT.ID}
常見問題
- 如果出現1條釘釘告警信息重複出現多次時,請檢查腳本關聯的日誌文件是否授權正確。