首先在釘釘上開啟釘釘機器人功能
說明:自定義關鍵詞是zabbix發送過來的消息內容必須含有你定義的ERROR或者error字段,否則消息無法發送過來
ip地址段:一般都是zabbix-server的IP地址
webhook 是釘釘接口的地址,等會要復制粘貼到zabbix-server上面去
自定義機器人
釘釘提供了一個 webhook 地址,https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx。 復制地址
獲取到Webhook地址后,用戶可以使用任何方式向這個地址發起 HTTP POST 請求,即可實現
給該群組發送消息。
--------------------------------------------------------------------------------------------------------------------------------------
在zabbix-server服務器上編寫發送到釘釘接口的腳本,一般都是用python編寫的
vim /etc/zabbix/zabbix_server.conf
:/alertscripts 找到這一行(alertscripts是zabbix-server自定義腳本的目錄,所有自定義的腳本都放在此處)
cd /usr/lib/zabbix/alertscripts/
vim dingding.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "https://xxxxxxxxxx" 釘釘機器人擎天柱的webhook地址
def msg(text):
json_text= {
"msgtype": "text",
"text": {
"content": text
},
"at": {
"atMobiles": [
"1527xxxxxx23" 發送給這個釘釘用戶 (釘釘用戶都是手機號碼注冊的)
],
"isAtAll": True 發送給群里面的所有人(不想讓其他人收到報警這里填False即可)
}
}
print(requests.post(api_url,json.dumps(json_text),headers=headers).content)
if __name__ == '__main__':
text = sys.argv[1]
msg(text)
:wq保存退出
chmod 755 dingding.py
手動測試是否能發消息到釘釘
./dingding.py "ERROR could not found java-scripts"
注意這里的內容包含了釘釘自定義的關鍵詞ERROR,如果沒有關鍵詞你是發不過去的
去釘釘上面看看有沒有收到消息
說明zabbix-server手動發送消息到釘釘的成功,接口無問題
----------------------------------------------------------------------------------------------------------------------
上面是手動測試的,現在我們在zabbix-server頁面配置zabbix自動發送報警內容到釘釘
名稱就叫釘釘好了(可以隨便取名)
類型選擇腳本
腳本名稱對應zabbix服務器/usr/lib/zabbix/alertscripts/路徑下的dingding.py,名字要和dingding.py保持一致
腳本參數{ALERT.MESSAGE}
網上還有很一部分人這里寫-msg={ALERT.MESSAGE} 效果應該是一樣的(我不確定)
直接用管理員用戶,也可以創建用戶
用系統默認的好了,這里面的信息不要動,我沒標紅色框的不要動好嗎,敵不動我不動
動這個
點擊添加
類型是釘釘
收件人是 我的釘釘賬戶(也就是你的手機號碼,手機號碼就是釘釘賬戶,要我說幾遍)
都勾選上,不要質疑我
手動添加主機
表示添加成功
名稱隨便取
名稱 website 我的應用服務就叫website,所以取名叫website,方便(可以任意取名)
類型 選擇zabbix主動模式(這里不一定是主動模式,根據實際情況選擇)
鍵值 是非常重要的
我這里是檢查tomcat的日志文件
log[/root/logs/website-log/website-error-2020-01-02.log,"ERROR|error",,,skip,,]
或許你有疑問,如果這里是輪訓日志怎么辦
log[/root/logs/website-log/website-error-`date +%F`.log,"ERROR|error",,,skip,,]
這是有問題的,log不支持正則表達式`date +%F`
logtr[/root/logs/website-log/website-error-`date +%F`.log,"ERROR|error",,,skip,,]
logtr倒是支持正則表達式,這樣寫也不報錯
但是好像消息發送不出去(我不知是哪里有問題)
我建議還是監控web1和web2的原始日志吧website-error.log(這樣要監控兩邊,很麻煩)
如果你是測試的話我建議在zabbix-agent上創建一樣的日志
zabbix-agent服務器
cd /root
mkdir logs
cd logs
mkdir website-log
cd website-log
touch website-error-2020-01-02.log
等會測試完了之后你可以刪掉
配置動作(就是如果檢測到website-error-2020-01-02.log內容有ERROR字段之后該做些什么)
在新的觸發條件里面選擇 觸發器示警度 選擇 >= 信息
在點擊添加
觸發器示警度>= 信息 表示如果報警的后果要大於等於信息,就開干
告警主機:{HOST.NAME}
告警信息:{TRIGGER.NAME}
告警項目:{ITEM.NAME}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警問題:{ITEM.VALUE}
當前狀態:故障
故障已持續{EVENT.AGE},請盡快處理
事件ID:{EVENT.ID}
告警信息:{TRIGGER.NAME}
告警項目:{ITEM.NAME}
告警時間:{EVENT.DATE} {EVENT.TIME}
恢復時間:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
告警問題:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}
故障共持續{EVENT.AGE}
事件ID:{EVENT.ID}
--------------------------------------------------------------------------------------------------------------------------------------------
現在開始測試
zabbix-agent
cd /root/logs/website-log
echo "17:12:56.370 ERROR com.alibaba.druid.pool.DruidDataSource[ROW=1087][mdc=Hd1bb2J81X] - testWhileIdle is true, validationQuery not set ">>website-error-2020-01-02.log
-----------------------------------------------------------------------------------------------------------------------------------------
去釘釘上看看
-----------------------------------------------------------------------------------------------------------------------
在到zabbix-server上面
我這里本來是1,我手動把問題關閉了就是0了
你那里應該是顯示1
點擊有問題的那一項,進去之后確認問題,
狀態:輸入ok
然后 在關閉問題的框上打勾
----------------------------------------------------------------------------------------------------------------------------
去釘釘上看看