Zabbix 隨筆:事件通知淺析(觸發器篇)
每天都會發生不同的事件,在軟件的世界也不例外,Zabbix 里面所發生的一切也稱為事件。Zabbix 的事件類型有如下幾種:
- 觸發器事件
- 服務事件
- 發現事件
- 自動注冊事件
- 內部事件
如何知道這些事件的內容?也是本文要提的事件通知,不過本文的內容只涉及觸發器事件,也是我們常說的告警。
正文
Zabbix 的事件是帶有時間戳的,因此具備事件通知的基礎條件,如果需要查看前端事件的詳細信息,可以在 Monitoring ->Prombles 里查看,也可以單擊時間查看時間的詳細信息。
可以查看問題清單
點擊時間戳查看問題詳情
本文環境
- RockyLinux 8.5
- Zabbix 6.0.2 LTS
邏輯分析
事件通知用人話來講,就是通知的內容是什么?通知到誰?通過什么渠道通知到人?如果把這幾個問題搞定了其實問題就不大了,全文將通過這三個問句探討。
模擬主機告警
創建一個模擬主機,掛載 ICMP Ping 模板,該主機是一個不存在的主機。
創建一個不存在的機器
觸發告警
查看告警
回到首頁,在默認儀表盤里是有問題模塊的,可以看到相關告警,可以通過告警查看當前問題為什么 ICMP ping 不可達,這是通過內部的組件告訴你一臺主機出現異常了,作為 NOC 團隊看這個儀表盤的確就可以了,但前提是24小時得有人盯著這個儀表盤,那么如果相關業務的人員也想看他們的主機情況,就得需要創建相關賬號,同時對賬號進行資源授權,而細分領域后,告警量級明顯會降低很多,此時業務人員也不可能時時刻刻盯著這個儀表盤,所以可以通過一些渠道告知業務人員,例如郵件、一些即時通信軟件,本文采用飛書的方式演示。
通過什么渠道告知?
第一個要解決的問題是通過什么渠道來發送通知這件事情,本文確定以飛書的形式通知業務方相關告知內容。由于官方沒有相對應的媒介,所以需要自行創建,本文不做媒介創建演示,具體可以參考我之前的文章。
創建的飛書媒介
發送通知的本質就是動作
既然確定了用什么渠道來發送通知,那么怎么發送通知呢?發送通知本身就是一個動作,在 Zabbix 里也是動作(Actions)。
觸發器動作(Trigger actions)
點擊創建一個動作,動作模塊里有兩個 tab,分別是動作和操作 動作部分有四塊,紅星的地方必須填寫。
進入觸發器動作
動作板塊
多個條件才會觸發計算類型
name 字段自定義即可:
Type of calculation,關于這個只有在兩個條件及以上的的時候才會觸發,里面包含四個選項。
- And/Or:和與或同時存在,And 和 Or 的放置方法為同類型條件為 Or,非同類型為 And。
- And:所有條件必須滿足。
- Or:滿足任意條件即可。
- Custom expression:自定條件組合。
A和D為觸發器條件,所以為Or,其他為觸發器級別和名稱,所以為and
Conditions,點擊 Add 后,會彈出條件對話框,會有三個選項:
- Type:包含很多種類型,就不一一贅述了。
- Operator:包含與不包含。
- 根據Type可變。
條件界面
條件類型
操作部分有6塊,紅星的地方必須填寫。
操作部分
Default operation step duration,默認操作步驟的時間,動作內全局變量。
Operations,告警動作。
- Steps:第一個數字代表步驟,后面的數字代表此步驟重復次數,如果是1-10,就證明此步驟每間隔一小時執行此動作。
- Step duration:步驟持續時間,0代表永不過期。
- Send to user groups:發送到用戶組。
- Send to users:發送到用戶。
- Send only to :推送渠道。
- Custom message:自定義消息模板。
- Conditions:條件(不常用,只有一個條件,就是事件被標記)。
Recovery operations,恢復動作。
- Operation,動作內容。
- Send to user groups,發送到組。
- Send to users,發送到用戶。
- Send only to,發送渠道。
- Custom message,自定義消息模板。
- Update operations,更新動作,內容與恢復動作一致。
- Pause operations for suppressed problems,暫停維護期間(被監控設備)的告警通知。
- Notify about canceled escalations 取消通知。
根據環境創建動作
本文的環境是創建一臺主機,主機組為 Linux Servers,告警推送給 Admin 用戶,根據上文淺析,判斷條件只需要一個就夠了,主機組為該組即可;動作詳情僅修改 Send to users,Send only to 即可。
創建條件
創建動作
建立完成后,首頁會出現動作的箭頭,此時證明寫的動作生效了,但是此時出現紅色的箭頭,點開查看原因為 No media defined for user,字面意思是用戶沒有定義媒介,言外之意是該用戶沒有定義媒介的配置。所以需要進入到用戶界面配置,需要配置的部分包括該用戶可以通過飛書接受信息,測試用戶就隨便填寫了,和應用無關(郵件與SMS除外),其他的字段分別是什么時間可以接受告警,接受的告警有哪些級別,啟用狀態。
添加用戶媒介配置
調整完用戶后,此時會發現依然會出現動作失敗的提示,只不過內容變為 No message defined for media type。這個報錯為消息模板未定義,即是通知內容模板未寫,有兩個地方可以填寫內容模板,第一個是媒介里的消息模板,第二個為動作里的自定義消息模板,消息模板是支持變量的,具體可以參閱官方文檔的宏,也可以參閱筆者的內容美化文章,這里不展開贅述了,至于區別就是媒介里的只需要創建一次,動作里的需要每一條都需要單獨寫,就這區別,兩者任選其一,本文使用媒介里的消息模板。
提示未定義消息模板
媒介里的消息模板
動作里的消息模板
媒介里自定消息模板效果圖
當出現下圖時候,代表發送已經成功,飛書 APP 也接收到相關信息,恢復和更新動作同理配置,限于篇幅原因不再展開。
寫在最后
整個事件通知其實以通知到相關人員為邏輯展開,理解起來就沒那么復雜,當然有很多細節需要自己體會,包括后期的事件升級功能、高階事件通知運用等等,技術本是以人為本,所以大家不理解的時候多想想背后的邏輯,自然簡單的多。