本文介紹ARMS告警管理如何應對大規模系統的告警配置。
背景知識
在告警管理中有一個非常重要的指標Mean Time To Contain(MTTC),MTTC描述了從檢測到故障事件到控制和解決該事件所需的平均時間。它是一個關鍵指標,因為它衡量了一個組織對事件的響應能力和效率。較短的MTTC意味著組織能夠快速識別并控制故障事件,減少潛在的損失和影響。
如下圖所示,告警處理的飛輪中想要更短的故障時間就需要更短的故障發現時間和更快的響應速度,并且在每一次的告警處理過程中不斷地對組織的處理機制進行復盤改進,從而提高告警的處理效率,縮短組織的MTTC。
大規模系統告警管理的痛點
復雜系統中,告警規則的配置會非常多且繁瑣。如何保證告警規則的覆蓋率,高效地配置告警規則?
在復雜的組織架構中,如何快速將告警發送到正確的處理人?
如何確保告警在需要人處理時,接手的時效性?
如何應對告警規則配置效率和精確指派的矛盾?
大規模系統通常在配置告警規則時告警規則的覆蓋率和配置效率往往難以兼得。一個典型的告警規則通常包含如下字段:
字段名稱 | 字段含義 |
告警名稱 | 用于區分不同的告警規則,描述告警類型。 |
告警等級 | 用于指示告警的嚴重程度,通常包括嚴重、一般、輕微等多個等級。 |
告警對象 | 指明出現問題的組件或設備,例如服務器、數據庫等。 |
監控指標 | 指示監控的具體指標,例如CPU使用率、內存使用率、網絡流量等。 |
閾值 | 用于設定觸發告警的閾值,例如CPU使用率超過80%、內存使用率超過90%,超過這個閾值就會觸發告警。 |
告警方式 | 指示告警的通知方式,例如郵件、短信、微信等。 |
告警描述 | 用于描述告警的詳細信息,例如問題發生的時間、持續時間、影響范圍等。 |
告警處理方式 | 指示出現告警時的處理方式和責任人,例如由誰負責處理、處理時間要求等。 |
在配置這樣一個告警時需要指定該告警的通知方式,通知人等信息。而在大規模系統下往往需要多個人和團隊來處理各個系統中產生的不同告警。如下圖所示是一個典型的垂直業務系統應該配置的告警信息,在這個垂直系統中不同層次的組件所產生的告警它的處理方式和處理人會完全不同。
當業務由多個垂直業務組成,并且部署在全球多個區域時,帶來的告警規則配置復雜度= 垂直業務 * 依賴組件 * 部署區域 * 運維團隊/人員 。 而由于人員的不穩定性還需要對這一份告警的配置進行動態調整,這對于告警規則的維護將是巨大的困難。
ARMS告警管理如何應對大規模系統的告警?
解耦告警配置與通知配置
與傳統告警不同,ARMS告警將告警規則分成告警配置和通知配置。通過配置解耦,在配置告警規則時不再需要關心告警通知給誰,從而降低了告警配置的復雜度。
字段名稱 | 字段含義 | |
告警配置(告警規則) | 告警名稱 | 用于區分不同的告警規則,描述告警類型。 |
告警等級 | 用于指示告警的嚴重程度,通常包括嚴重、一般、輕微等多個等級。 | |
告警對象 | 指明出現問題的組件或設備,例如服務器、數據庫等。 | |
監控指標 | 指示監控的具體指標,例如CPU使用率、內存使用率、網絡流量等。 | |
閾值 | 用于設定觸發告警的閾值,例如CPU使用率超過80%、內存使用率超過90%,超過這個閾值就會觸發告警。 | |
通知配置(通知策略) | 告警方式 | 指示告警的通知方式,例如郵件、短信、微信等。 |
告警描述 | 用于描述告警的詳細信息,例如問題發生的時間、持續時間、影響范圍等。 | |
告警處理方式 | 指示出現告警時的處理方式和責任人,例如由誰負責處理、處理時間要求等。 |
在ARMS告警管理中,告警觸發后會將告警事件發送到告警中心。通知規則(通知策略)會根據其中的事件匹配規則,在告警中心進行訂閱。訂閱到匹配的規則后再通過通知策略中的配置進行通知。提高了告警配置的靈活度。
標簽+低代碼模式告警富化
在告警解耦過程中最重要的實現方式是靈活的事件匹配規則。如訂閱“業務=業務一&組件=組件一&等級=P1&指標=性能指標”這樣一組條件,就需要每個告警事件上都包含業務、組件、等級、指標這幾個標簽。
在ARMS中采用半結構化的數據來描述一個告警事件,一個告警事件中所有的標簽都可以用來配置通知策略的事件匹配規則(訂閱規則)。
半結構化的告警事件數據結構
[
{
"labels": {
"alertname": "<requiredAlertName>",
"labelname": "<labelvalue>",
...
},
"annotations": {
"alertname": "<labelvalue>",
},
"startsAt": "<rfc3339>",
"endsAt": "<rfc3339>",
"generatorURL": "<generator_url>",
},
...
]
labels(標簽):告警元數據,一組標簽唯一標識一個事件,所有標簽均相同的事件為同一個事件,重復上報會進行合并,例如“alertname: 告警名稱 ”。
annotations(注釋):注釋是告警事件的附加描述,注釋不屬于元數據。例如“message: 告警內容”。不同時間點發生的同一個事件,它們的標簽是相同的,但是注釋可以是不同的。比如告警內容的注釋可能不同,例如“主機CPU使用率持續三分鐘大于75%,當前值82%”。
startsAt(告警開始時間):告警事件開始時間。
endsAt(告警結束時間):告警事件結束時間。
generatorUrl(事件URL地址):告警事件URL地址。
ARMS自身產生的告警規則可以通過自定義標簽來給告警事件中添加各種業務所需的標簽。針對于其他告警源產生的告警,則可以通過低代碼模式的事件處理流來對告警事件進行標簽富化,從而滿足依靠標簽進行訂閱告警的靈活配置需求。