基於標籤的告警路由

2022-06-11 04:51:11 字數 2995 閱讀 5276

在alertmanager的配置中會定義乙個基於標籤匹配規則的告警路由樹,以確定在接收到告警後alertmanager需要如何對其進行處理:

route:
其中route中則主要定義了告警的路由匹配規則,以及alertmanager需要將匹配到的告警傳送給哪乙個receiver,乙個最簡單的route定義如下所示:

route:

group_by: ['alertname']

receiver: 'web.hook'

receivers:

- name: 'web.hook'

webhook_configs:

- url: ''

如上所示:在alertmanager配置檔案中,我們只定義了乙個路由,那就意味著所有由prometheus產生的告警在傳送到alertmanager之後都會通過名為web.hook的receiver接收。這裡的web.hook定義為乙個webhook位址。當然實際場景下,告警處理可不是這麼簡單的一件事情,對於不同級別的告警,我們可能會不完全不同的處理方式,因此在route中,我們還可以定義更多的子route,這些route通過標籤匹配告警的處理方式,route的完整定義如下:

[ receiver: ]

[ group_by: '[' , ... ']' ]

[ continue: | default = false ]

match:

[ : , ... ]

match_re:

[ : , ... ]

[ group_wait: | default = 30s ]

[ group_interval: | default = 5m ]

[ repeat_interval: | default = 4h ]

routes:

[ - ... ]

每乙個告警都會從配置檔案中頂級的route進入路由樹,需要注意的是頂級的route必須匹配所有告警(即不能有任何的匹配設定match和match_re),每乙個路由都可以定義自己的接受人以及匹配規則。預設情況下,告警進入到頂級route後會遍歷所有的子節點,直到找到最深的匹配route,並將告警傳送到該route定義的receiver中。但如果route中設定continue的值為false,那麼告警在匹配到第乙個子節點之後就直接停止。如果continue為true,報警則會繼續進行後續子節點的匹配。如果當前告警匹配不到任何的子節點,那該告警將會基於當前路由節點的接收器配置方式進行處理。

其中告警的匹配有兩種方式可以選擇。一種方式基於字串驗證,通過設定match規則判斷當前告警中是否存在標籤labelname並且其值等於labelvalue。第二種方式則基於正規表示式,通過設定match_re驗證當前告警標籤的值是否滿足正規表示式的內容。

如果警報已經成功傳送通知, 如果想設定傳送告警通知之前要等待時間,則可以通過repeat_interval引數進行設定。

在之前的部分有講過,alertmanager可以對告警通知進行分組,將多條告警合合併為乙個通知。這裡我們可以使用group_by來定義分組規則。基於告警中包含的標籤,如果滿足group_by中定義標籤名稱,那麼這些告警將會合併為乙個通知傳送給接收器。

有的時候為了能夠一次性收集和傳送更多的相關資訊時,可以通過group_wait引數設定等待時間,如果在等待時間內當前group接收到了新的告警,這些告警將會合併為乙個通知向receiver傳送。

group_interval配置,則用於定義相同的gourp之間傳送告警通知的時間間隔。

例如,當使用prometheus監控多個集群以及部署在集群中的應用和資料庫服務,並且定義以下的告警處理路由規則來對集群中的異常進行通知。

route:

receiver: 'default-receiver'

group_wait: 30s

group_interval: 5m

repeat_interval: 4h

group_by: [cluster, alertname]

routes:

- receiver: 'database-pager'

group_wait: 10s

match_re:

service: mysql|cassandra

- receiver: 'frontend-pager'

group_by: [product, environment]

match:

team: frontend

預設情況下所有的告警都會傳送給集群管理員default-receiver,因此在alertmanager的配置檔案的根路由中,對告警資訊按照集群以及告警的名稱對告警進行分組。

如果告警時**於資料庫服務如mysql或者cassandra,此時則需要將告警傳送給相應的資料庫管理員(database-pager)。這裡定義了乙個單獨子路由,如果告警中包含service標籤,並且service為mysql或者cassandra,則向database-pager傳送告警通知,由於這裡沒有定義group_by等屬性,這些屬性的配置資訊將從上級路由繼承,database-pager將會接收到按cluser和alertname進行分組的告警通知。

而某些告警規則**可能**於開發團隊的定義,這些告警中通過新增標籤team來標示這些告警的建立者。在alertmanager配置檔案的告警路由下,定義單獨子路由用於處理這一類的告警通知,如果匹配到告警中包含標籤team,並且team的值為frontend,alertmanager將會按照標籤product和environment對告警進行分組。此時如果應用出現異常,開發團隊就能清楚的知道哪乙個環境(environment)中的哪乙個應用程式出現了問題,可以快速對應用進行問題定位。

Zabbix實戰 Zabbix基於郵件告警配置

參考樣例 一 軟體版本 作業系統 centos 6.5 x86 64 zabbix版本 3.0.3 二 zabbix 執行告警動作流程 item 觸發器 動作 郵件還是命令 媒介 指令碼還是第三方 傳送郵件 監控第一步驟,我們從最底層開始 先新增媒介 因為沒有郵件伺服器,所以我們選擇指令碼 三 新增...

基於查詢的路由協議

一 基於查詢的路由協議 1 定向擴散路由協議 定向擴散路由協議是一種基於查詢的路由方法,這和傳統路由演算法的概念不同。定向擴散路由機制包括週期性的興趣擴散 梯度建立 資料傳播與路徑加強等階段。興趣擴散階段 在興趣擴散階段,匯聚節點周期性地向鄰居節點廣播興趣訊息。興趣訊息包括任務型別 事件區域 資料傳...

基於Attribute的Web API路由設定

路由對於mvc應用程式來說都是至關重要的乙個部門,不管是asp.net mvc或者ruby on rails 當然還有其它的,我只熟悉這兩個 asp.net mvc自帶的路由配置是在global.asax檔案中,這裡給大家介紹乙個基於屬性的路由配置工具 attributerouting,它不僅可以適...