Alertmanager
Alertmanager 處理由客戶端應用程式(如 Prometheus 伺服器)傳送的告警。它負責對告警進行去重、分組,並將其路由到正確的接收器整合(如電子郵件、PagerDuty 或 OpsGenie)。它還負責告警的靜默和抑制。
以下描述了 Alertmanager 實現的核心概念。請參閱配置文件以詳細瞭解如何使用它們。
分組
分組將性質相似的告警分類為單個通知。這在大規模故障期間特別有用,因為此時許多系統會同時失效,可能會有數百到數千個告警同時觸發。
示例: 當發生網路分割槽時,您的叢集中正在執行數十個或數百個服務例項。其中一半的服務例項無法再訪問資料庫。Prometheus 中的告警規則配置為,如果服務例項無法與資料庫通訊,則為每個服務例項傳送一條告警。結果,數百條告警被髮送到了 Alertmanager。
作為使用者,你只想收到一條通知,同時仍能準確地檢視哪些服務例項受到了影響。因此,可以配置 Alertmanager 按照叢集(cluster)和告警名稱(alertname)對告警進行分組,從而傳送一條緊湊的單條通知。
告警的分組、分組通知的時間以及這些通知的接收器,都是透過配置檔案中的路由樹進行配置的。
抑制
抑制是指當某些其他告警已經觸發時,壓制特定告警通知的概念。
示例: 某個告警正在觸發,通知整個叢集無法訪問。此時可以配置 Alertmanager,如果該特定告警已觸發,則靜默與該叢集相關的所有其他告警。這可以防止傳送數以百計或數以千計與實際根源問題無關的告警通知。
抑制是透過 Alertmanager 的配置檔案進行配置的。
靜默
靜默是一種在特定時間內簡單地將告警靜音的直接方法。靜默是基於匹配器配置的,就像路由樹一樣。系統會檢查傳入的告警是否與活動靜默的所有等值或正則表示式匹配器相匹配。如果匹配,將不會為該告警傳送任何通知。
靜默是在 Alertmanager 的 Web 介面中配置的。
客戶端行為
Alertmanager 對其客戶端的行為有特殊要求。這些要求僅適用於不使用 Prometheus 傳送告警的高階用例。
高可用
Alertmanager 支援透過配置建立高可用叢集。這可以使用 --cluster-* 標誌進行配置。
重要的一點是,不要在 Prometheus 和其 Alertmanager 之間對流量進行負載均衡,而是應該讓 Prometheus 指向所有 Alertmanager 的列表。
告警限制 (可選)
Alertmanager 支援透過配置限制每個告警名稱的活動告警數量。這可以使用 [--alerts.per-alertname-limit] 標誌進行配置。
當達到限制時,任何新的告警都會被丟棄,但已識別告警的心跳仍會被處理。已知的告警(指紋)會自動過期,以便為新告警騰出空間。
當向 Alertmanager 傳送了異常高數量的相同告警例項時,此功能非常有用。限制每個告警名稱的告警數量可以防止可靠性問題,並避免告警接收器被淹沒。
alertmanager_alerts_limited_total 指標顯示由於每個告警名稱限制而被丟棄的告警總數。啟用 alert-names-in-metrics 功能標誌將在該指標中新增 alertname 標籤。