乾貨|Zabbix 配置 Webhook 告警推送至企業微信

5天認證培訓,系統掌握,請聯繫13817720274.

背景

Zabbix如何將告警通過Webhook發送至IM?網上搜羅一番發現配置還是比較繁瑣,以此爲由本文將介紹如何通過自帶的Webhook功能將告警信息推送至IM平臺,筆者的推送思路是創建兩個Webhook一個爲一般告警或以下,另一個爲嚴重和災難級別,方便區分告警緊急程度,下面來看看如何配置吧。

版本與環境

  • 版本:Zabbix 6.0 LTS

  • IM:企業微信

Webhook

什麼是Webhook

以下是來自GPT對Webhook的介紹: Webhook 是一種網絡編程的概念,用於在特定事件發生時,將數據或通知傳送到指定的 URL。它是一種異步通信方式,可以讓應用程序之間實現實時的數據交換和信息傳遞。 以下是 Webhook 的一些基本概念和特點:- 工作原理: Webhook 的工作原理很簡單。當某個事件在源應用程序中觸發時,源應用會向預先配置的目標 URL 發送 HTTP 請求。目標 URL 可以是你自己的服務器、外部服務、第三方應用程序等。- 事件觸發: Webhook 通常用於捕獲和響應特定事件,如用戶註冊、支付成功、數據更新等。當事件發生時,源應用程序會將相關數據封裝爲一個 HTTP 請求,併發送到目標 URL。- 實時性: Webhook 實現了實時數據傳輸,因爲事件觸發後立即發送通知。這與輪詢(Polling)方式不同,後者需要定期查詢源數據是否有更新。- 自定義數據: Webhook 可以在請求中傳遞自定義數據,這樣目標應用程序可以根據數據內容做出適當的處理。- 用途廣泛: Webhook 在很多場景中得到應用,包括通知、集成、自動化等。比如,你可以通過 Webhook 將表單提交的數據發送到外部數據庫、實現不同應用程序之間的集成,或者實現實時通知功能。- 安全性: Webhook 通常需要進行身份驗證,確保只有合法的請求可以觸發。常見的方式包括使用密鑰、令牌、數字簽名等來驗證來源。- 管理: 一些服務提供了管理界面,讓用戶可以配置和管理 Webhook,包括設置事件、目標 URL、請求方法等。 Webhook 的使用非常靈活,可以根據不同的應用場景進行定製。許多雲服務、應用程序和開發框架都支持 Webhook 功能,使得不同系統之間的集成更加便捷。

創建Webhook

先創建一個羣聊,點擊菜單->添加羣機器人->添加機器人。

選擇新建機器人。

輸入機器人名稱後點擊添加。

創建完成後得到一個webhook地址。


安裝ZABBIX

參照此片文章

Debain 部署 Zabbix 6 LTS1 贊同 · 0 評論文章

創建一般告警媒介

創建告警類型

按需填入相關信息,token獲取請參照 創建Webhook 章節。

javaScript腳本內容如下,有相關注釋。

var WeCom = {
message: null,
webhook_url: null,

sendMessage: function() {
// 定義消息推送格式
var params = {
msgtype: "markdown",
markdown: {
content:WeCom.message
},
// 這個參數控制是否禁用消息中的鏈接預覽。當設置爲 true 時,如果消息中包含鏈接,企業微信客戶端將不會自動預覽鏈接的內容,而是直接顯示鏈接地址。
disable_web_page_preview: true,
},
data,
response,
request = new CurlHttpRequest();
request.AddHeader('Content-Type: application/json');
data = JSON.stringify(params);

// 將推送信息寫入zabbix日誌中用於排錯,第一個參數 4 表示日誌級別Information,不存儲webhook鏈接信息,避免泄露。
Zabbix.Log(4, '[WeCom Webhook] URL: Webhook address');
Zabbix.Log(4, '[WeCom Webhook] params: ' + data);
// 推送告警消息
response = request.Post(WeCom.webhook_url, data);
Zabbix.Log(4, '[WeCom Webhook] HTTP code: ' + request.Status());
Zabbix.Log(4, '[WeCom Webhook] response: ' + response);

// 格式化返回的結果並做出判斷,有異常則拋出異常。
try {
response = JSON.parse(response);
}
catch (error) {
response = null;
Zabbix.Log(4, '[WeCom Webhook] response parse error');
}

if (request.Status() !== 200 || response.errcode !== 0 || response.errmsg !== 'ok') {
if (typeof response.errmsg === 'string') {
throw response.errmsg;
}
else {
throw 'Unknown error. Check debug log for more information.'
}
}
}
}

try {
var params = JSON.parse(value);
// 判斷Webhook_url參數是否定義,未定義拋出錯誤。
if (typeof params.Webhook_url === 'undefined') {
throw 'Incorrect value is given for parameter "Webhook_url": parameter is missing';
}

// 傳參給WeCom
WeCom.webhook_url = params.Webhook_url;
WeCom.message = params.Subject + '\n' + params.Message;
// 執行消息推送函數
WeCom.sendMessage();
// 返回給zabbix,ok 在 Zabbix 動作中會被用來標識成功執行。
return 'OK';
}
// 遇到錯誤拋出錯誤信息。
catch (error) {
Zabbix.Log(4, '[WeCom Webhook] notification failed: ' + error);
throw 'Sending failed: ' + error + '.';
}

配置一般告警通知消息模板

告警通知消息格式如下圖所示:


告警可用變量請參照官方文檔 跳轉

配置信息如下,標題爲和關鍵信息加粗和上色(黃色)。

# <font color="warning">【ZABBIX監控告警】</font>

>通知時間:<font color="comment">{DATE}-{TIME}</font>
>告警級別:**<font color="warning">{TRIGGER.SEVERITY}</font>**
>主機名稱:<font color="comment">{HOST.NAME}</font>
>主機IP:<font color="comment">{HOST.IP}</font>
>告警時間:**<font color="warning">{EVENT.DATE}-{EVENT.TIME}</font>**
>問題名稱:**<font color="warning">{EVENT.NAME}</font>**
>問題詳情:<font color="comment">{ITEM.NAME}:{ITEM.VALUE}</font>
>目前狀態:**<font color="warning">{TRIGGER.STATUS}</font>**
>操作數據:<font color="comment">{EVENT.OPDATA}</font>
>告警持續時間:**<font color="warning">{EVENT.DURATION}</font>**
>[確認告警和查看詳情,請點擊鏈接](http://http://x.x.x.x:8080/)

企業微信webhook支持三種顏色,詳情參考官方文檔跳轉


配置一般告警恢復消息模板

告警消息恢復通知格式如下圖所示:


告警可用變量請參照官方文檔 跳轉

配置信息如下,標題爲和關鍵信息加粗和上色(綠色)。

# <font color="info">【ZABBIX告警恢復】</font>

>通知時間:<font color="comment">{DATE}-{TIME}</font>
>告警級別:**<font color="info">{TRIGGER.SEVERITY}</font>**
>主機名稱:<font color="comment">{HOST.NAME}</font>
>主機IP:<font color="comment">{HOST.IP}</font>
>告警時間:**<font color="warning">{EVENT.DATE}-{EVENT.TIME}</font>**
>問題名稱:**<font color="info">{EVENT.NAME}</font>**
>問題詳情:<font color="comment">{ITEM.NAME}:{ITEM.VALUE}</font>
>目前狀態:**<font color="info">{TRIGGER.STATUS}</font>**
>操作數據:<font color="comment">{EVENT.OPDATA}</font>
>告警持續時間:**<font color="info">{EVENT.DURATION}</font>**
>[確認告警和查看詳情,請點擊鏈接](http://x.x.x.x:8080/)

點擊添加,完成告警媒介添加。


驗證告警媒介



如下圖所示標識腳本調用正常,出現異常情況可根據日誌信息針對性解決。


會收到這樣一條信息。


配置一般告警動作

點擊創建動作。


定義名稱和點擊添加條件。


選擇一般嚴重及以下等級告警。

驗證配置。


配置操作,發送到的用戶組或用戶至少要有設備的讀取權限。


定義告警恢復操作。


覈對配置後點擊添加。


配置用戶一般告警媒介

進入Admin用戶。


配置告警級別。


覈對信息,點擊更新。


創建緊急告警媒介

配置緊急告警通知消息模板

將一般告警媒介克隆一份,替換Webhook的地址。

修改名稱和Webhook地址。


修改告警消息模板,主題修改爲ZABBIX監控緊急告警 ,問題和恢復都需要修改然後點擊添加。


配置緊急告警動作



配置條件爲嚴重及以上


設置操作爲緊急告警,告警週期縮短至每60秒一次

設置恢復操作

覈對後點擊添加。

區分普通和緊急告警。


配置用戶緊急告警媒介


覈對配置後點擊更新。


至此Zabbix通過Webook告警配置完成。

其它IM平臺修改一下Webhook地址應該就好了。

原文鏈接:https://zhuanlan.zhihu.com/p/649973605

延伸閱讀

乾貨|Zabbix監控深信服超融合

Zabbix7.0 beta1發佈,性能提升、架構優化等新功能搶先看

Zabbix7.0新功能,還可以這樣推送數據!不止zabbix_sender

本文分享自微信公衆號 - Zabbix開源社區(china_zabbix)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章