ARMS告警管理支持通過通知策略對已經產生的告警事件進行路由、分組、壓縮和聚合,然后通過短信、電話、郵箱、釘釘、企業微信、飛書、Webhook等多種方式進行通知。此外,通知策略還支持配置重復通知策略、升級策略和排班策略等,滿足不同場景下的高級通知需求。
背景信息
用戶通過配置告警規則或者主動推送方式產生大量告警事件后需要及時收到通知,但因為告警事件數量較多,期望的通知場景、通知方式也各不相同,同時部分用戶還期望能夠管理告警的生命周期。為了解決這些問題,ARMS通知策略支持按需匹配告警事件,對告警事件進行壓縮、分組生成告警,然后提供多樣化的方式進行通知;ARMS通知策略還支持告警關閉、屏蔽、認領等功能,幫助用戶及時、準確地收到告警通知,方便快捷地查看并管理告警。
通知策略處理流程
使用通知策略的前提是已經準備好了告警事件的來源。目前ARMS告警事件有兩種來源:
ARMS告警規則:ARMS告警管理默認集成ARMS告警規則,在ARMS控制臺可以配置應用監控告警規則、前端監控告警規則、Prometheus告警規則、K8s監控告警規則和應用安全告警規則,在配置的告警規則滿足觸發條件后,會產生告警事件并可以被通知策略匹配到。
集成:ARMS告警管理支持第三方產品的集成,ARMS支持將自建Prometheus、SLS日志服務、云監控、Grafana、Zabbix、Skywalking等產品的事件快速發送到ARMS進行管理,也支持通過自定義集成方式將事件主動上報到ARMS。在配置好集成后,來自集成的事件可以被通知策略匹配到。
在配置好告警事件來源后,通知策略對告警事件的處理流程如下圖所示,分為告警事件匹配、事件處理和告警通知三部分。
告警事件匹配
告警事件是通知策略進行處理的基本單位,告警事件來自于ARMS告警規則或者集成,支持一些必填的基本屬性和可擴容的擴展字段,字段的鍵值對被稱為事件的Label。
如上圖所示,告警事件包括事件名稱、事件描述、開始時間、結束時間等基本字段,也包括一些擴展字段。如果事件除基礎字段之外的Label都完全相同,則會被ARMS默認壓縮為一個事件。
創建通知策略時,可以按照任意Label來匹配告警事件,事件匹配規則支持通過等于、正則匹配等多種匹配規則對告警事件進行過濾。
在使用事件匹配規則匹配告警事件時,需要注意以下幾點:
事件匹配規則可以匹配到所有的滿足條件的非靜默告警事件。
同一個事件匹配規則之內的多個條件是“并”的關系,同時滿足的告警事件才會被匹配到。
多個事件匹配規則之間是“或”的關系,滿足任何一個事件匹配規則的告警事件都會被匹配到。
通過定義事件匹配規則,您可以將任何告警事件精準識別出來,并且按照需求進行通知或靜默。
事件處理
滿足事件匹配規則的告警事件才會被處理,您可以在配置通知策略時設置對告警事件的處理方式。
事件處理方式支持以下兩種:
壓縮:將匹配到的告警事件壓縮為一個告警或者按照分組壓縮為多個告警。
當設置事件處理方式為壓縮時,可以進一步設置是否需要按照指定Label進行分組,即將事件按照指定Label進行分組后壓縮為多個告警。按照Label進行分組后,每個分組有單獨的告警觸發、發送和恢復的生命周期,可以單獨進行發送、恢復和管理。
設置分組后,如果每個分組的告警事件連續五分鐘沒有新的告警事件觸發,則會被認為告警事件已經恢復。當一個分組下面所有的告警事件都恢復時,告警就會恢復并且發送恢復通知。
如果無需接收恢復通知,可以設置取消,那么在告警恢復時將不會發送恢復通知,但是事件和告警仍然會自動恢復,只是在告警恢復時不再發送恢復通知。
靜默:將匹配到的告警事件全部標記為靜默,使其他任何通知策略無法匹配到這些事件。
當設置告警事件處理方式為靜默時,可以進一步設置靜默規則生效的時間段。在這個時間段內,滿足條件的告警事件都會被標記為靜默事件,被標記為靜默的事件無法被任何通知策略匹配到。事件處理方式設置為靜默時,無需配置告警通知方式。
告警通知
當告警處理方式設置為壓縮后,ARMS會將告警事件壓縮為一個告警事件組或按照設置的Label分為多個告警事件組,每個告警事件組被稱為告警,在通知策略里可以設置告警的通知對象和通知方式。
通知人可以選擇聯系人、聯系人組、釘釘群、Webhook、排班策略等,通知方式選擇需要接收通知的方式。
升級通知方式可以選擇以下兩種:
重復通知:當告警在沒有恢復的持續期間內,每隔一段時間就重新進行通知。
升級策略:當告警在沒有恢復的持續時間內,按照設置的升級策略以其他方式通知不同的對象。
示例場景
使用通知策略進行告警通知時,推薦參考以下內容配置:
配置合理的告警規則或者集成,產生包含必備字段的告警事件。
按照需求配置一個或者多個需要靜默的通知策略,如果是長時間需要靜默的事件,建議關閉對應的告警規則或者停止推送此類事件到集成。
通知策略的數量原則上與不同的通知對象群體數對應,先按照不同的通知對象群體創建對應的通知策略,然后設置事件匹配規則來匹配想要發送給這個群體的事件。
當使用釘釘群、企業微信或者飛書等IM工具作為告警接收平臺時,推薦使用IM機器人的方式發送告警,并且使用卡片上的屏蔽、認領、解決告警等功能來快捷地在任意平臺管理告警規則,并且在事后查看告警的產生數據、統計數據、解決人員和平均解決時長等信息。
下面通過三個具體場景演示通知策略的使用方式。
如下三個場景是比較常見且合理使用ARMS告警管理來實現告警需求的具體場景,在具體實踐中可以參考下面的一個場景或者結合多個場景實現復雜的業務場景下的通知需求。
場景一:告警發送到個人并認領、處理告警
配置告警規則并且通知到個人是比較基礎且常見的一個場景。
配置告警規則
如果使用了ARMS Prometheus,可以在ARMS控制臺配置基本的容器CPU告警規則和容器內存告警規則。
如果使用的不是ARMS Prometheus,則可以通過集成將告警事件上報,然后在告警事件歷史頁面查看告警事件。
配置通知策略
在產生告警事件或者預期可以產生告警事件后,就可以創建通知策略來處理告警事件,從而產生告警并且發送給自己。
以上面具體的Prometheus告警規則為例,如果需要將當前集群下的告警規則產生的告警事件發送到釘釘群,需要先創建釘釘機器人,然后再創建通知策略。
通知策略設置如下:
事件匹配規則:需要將alert-dev集群名稱下的兩個告警規則產生的告警事件全部匹配到,并且避免匹配到其他規則的事件,所以可以設置匹配告警事件規則為:告警事件的集群名稱為alert-dev,且告警名稱為容器CPU告警-測試或容器內存告警-測試。
事件處理:處理方式選擇壓縮,因為當前匹配到的告警事件來自于兩個告警規則,實際通知時如果需要兩個規則的事件產生不同的告警,并且有獨立的通知周期,那么可以設置事件分組的字段為集群名稱和告警名稱,兩個告警規則產生的事件將會被分到兩個獨立的告警中。
告警生成:通知人選擇之前新建好的釘釘機器人,通知方式選擇釘釘,此處設置基礎的重復通知模式,設置當告警持續期間,每5分鐘重復發送一次通知。
配置好通知策略后,單擊保存,然后查看對應的釘釘群,即可看到對應的告警通知。
認領、處理告警
當釘釘群收到告警通知時,單擊卡片上的按鈕即可處理告警。第一次處理告警時,需要綁定手機號。更多信息,請參見在告警通知群中處理告警。
認領告警:將告警狀態置為已經認領,同時其他人可以看到告警已經被認領。
關閉/解決告警:將告警狀態置為已解決,并且填寫解決方案。如果告警事件實際上仍在持續,則會產生新的同名告警。
關注告警:關注告警后,可以在右側彈框首頁查看關注的告警列表。
推送告警:如果關聯了工單系統,可以將告警推送到工單系統。
屏蔽告警:如果告警事件暫時不需要關注,可以選擇屏蔽一段時間告警通知不進行發送。
未解決告警:可以查看未解決告警列表。
場景二:告警發送到多個不同的業務團隊
例如SRE團隊可能需要配置告警規則并且根據不同的業務標簽,將告警發送到不同的業務團隊。
目前某公司有SRE團隊、業務部門A、業務部門B、業務部門C四個團隊,四個業務團隊的業務應用混合部署在cluster-dev、cluster-prod-1和cluster-prod-2集群中,其中cluster-dev是測試集群,cluster-prod-1和cluster-prod-2是生產集群,不同業務團隊的應用部署在不同的命名空間下。
現在SRE團隊需要為每個集群配置基本的容器CPU告警、容器內存告警、容器磁盤告警和一些業務告警規則。現在想要實現如下兩個通知需求:
測試集群cluster-dev的告警通知發送到對應的業務團隊的釘釘群,不發送短信、電話,每個業務團隊僅接收其負責的Pod的告警,通知頻率較低。
生產集群cluster-prod-1和cluster-prod-2的所有告警通知都需要發送給SRE團隊,每個業務團隊僅接收其負責的Pod的告警,通知頻率較高。
使用Prometheus告警規則模板創建告警規則
如果您的集群接入了ARMS Prometheus,則可以參考以下操作使用Prometheus告警規則模板創建告警規則,如果是使用集成將事件發送到ARMS告警管理,則需自行配置告警規則。
在ARMS控制臺的 頁面,根據需求先創建告警規則模板。具體操作,請參見Prometheus告警規則模板。
創建告警規則模板之后,批量應用到集群cluster-dev、cluster-prod-1和cluster-prod-2。
在 頁面,可以看到告警規則已經批量創建好,每個集群都應用了四條告警規則。
創建聯系人、聯系人組、IM機器人
添加SRE團隊、業務部門A、業務部門B、業務部門C的聯系人,通知方式可以是聯系人(短信、電話、郵件),IM機器人(釘釘、企業微信、飛書)和Webhook。
在這個場景中,每個業務團隊都需要添加部分聯系人和一個釘釘群。
創建通知策略進行告警通知
需求1:測試集群cluster-dev的告警通知發送到對應的業務團隊的釘釘群,不發送短信、電話,每個業務團隊僅接收其負責的Pod的告警,通知頻率較低。
為了實現這個需求,此處需要創建三條通知策略,分別對應三個業務團隊的釘釘群。
業務團隊A接收測試環境的通知策略設置如下:
事件匹配規則:此通知策略需要過濾出來自測試集群的屬于業務團隊A名下的Pod產生的告警事件。在本場景中,業務團隊之間是通過命名空間(Namespace)隔離,所以設置事件匹配規則如下圖所示。如果在業務場景中,業務團隊之間通過Pod名稱或者其他自定義標簽隔離,可以通過額外過濾條件進行過濾。
事件處理:選擇壓縮,因為告警事件可能來自多個告警規則,所以這里需要按照告警名稱做分組,集群名稱可以選填,不影響結果。
告警生成:測試環境的告警只需要通知到釘釘群,所以這里選擇釘釘群,設置通知頻率為30分鐘重復通知一次。
參考業務團隊A為業務團隊B和業務團隊C創建對應的通知策略。
需求2:生產集群cluster-prod-1、cluster-prod-2的所有告警通知都需要發送給SRE團隊,每個業務團隊僅接收其負責的Pod的告警,通知頻率較高。
為了實現此需求,需要另外創建四個通知策略,分別對應于SRE團隊和三個業務團隊的生產環境接收對象。
SRE團隊需要接收所有告警,所以通知策略需要設置如下:
事件匹配規則:來自生產集群cluster-prod-1、cluster-prod-2的所有告警事件都需要發送到SRE團隊。所以這里僅過濾集群名稱,不再添加其他條件。
事件處理:這里可能匹配到來自多個集群、多個告警規則的告警事件,所以分組這里需要選擇集群名稱、告警名稱。
告警生成:生產環境需要通知到SRE團隊成員的短信和電話以及釘釘群,所以這里需要選擇對應的聯系人組、釘釘群,選擇對應通知方式,并且設置升級通知方式為告警持續期間,每隔5分鐘重復通知一次。
每個業務團隊需要接收其相關的Pod的告警,以業務團隊A為例通知策略需要設置如下:
事件匹配規則:來自生產集群cluster-prod-1、cluster-prod-2的所有與業務團隊A相關的告警事件都需要發送給業務團隊A,本場景中業務團隊應用在不同命名空間下,所以添加過濾條件為命名空間等于team-a。
事件處理:這里可能匹配到來自多個集群、多個告警規則的告警事件,所以分組這里需要選擇集群名稱、告警名稱
告警生成:生產環境需要通知到業務團隊A成員的短信和電話以及釘釘群,所以這里需要選擇對應的聯系人組、釘釘群,選擇對應通知方式,并且設置通知方式為告警持續期間,每隔5分鐘重復通知一次。
參考業務團隊A為業務團隊B和業務團隊C創建對應的通知策略。
創建完成之后,就能夠滿足發送需求,后續釘釘群告警規則的管理請參見上文場景一。
在本場景中,一共創建了:
四條告警規則模板。
若干聯系人和釘釘機器人。
七條通知策略。
滿足了監控測試和生產環境的基礎資源并按照環境、團隊將告警發送給不同對象的需求。后續如果需要添加新的告警規則,僅需添加告警規則,無需變更通知策略。如果團隊或者發送需求有調整,也僅需改變通知策略。
場景三:告警按照輪值人員和應急響應機制進行通知
部分情況下,告警通知可能需要按照值班表發送給不同人員,并且在告警發送對象未及時響應的情況下進行升級通知。
例如某部門工作時間由三個小組成員A、B、C輪流值班,非工作時間由成員D值班,值班人員未及時響應時需要向上升級。
具體需求為:
三位成員A、B、C每人值班兩天,然后輪換下一位,值班成員A、B、C僅在每天上午9點~晚上6點接收告警,其他時間由成員D值班。
正常情況下告警通知僅發送短信,但是在10分鐘告警未認領的情況下,電話通知值班人員。
如果在電話通知值班人員的10分鐘后,告警仍然未被認領,則會電話通知團隊主管。
創建聯系人和排班策略
創建排班策略。
創建班次1,值班成員包括A、B、C,每天9:00到18:00接收告警,每48小時輪換一次。
創建班次2,值班成員包括D,每天18:00到次日09:00接收告警,不輪換。
單擊保存即可查看創建的值班表。
創建升級策略
按照需求,當告警10分鐘未認領時,需要給值班人員發送電話通知,當告警20分鐘未認領時,需要給團隊主管發送電話通知。
創建通知策略