本文以容器CPU使用率告警為例演示當Pod出現告警后,如何通過Pod上的標簽進行告警分發。
背景信息
Kubernetes提供了非常輕巧靈活的標簽機制實現多維度的資源分組管理功能,在實際的使用中我們通常會給應用打上各種標簽,例如env:prod
代表應用是生產環境,service:iam
代表應用提供IAM服務。通過這些標簽我們可以從各個維度來進行管理,如查看生產環境的應用列表,查看IAM服務的資源使用量。
ARMS告警管理可以通過Prometheus數據源對告警添加標簽,當Pod出現告警后可以將Pod上的Labels作為標簽添加到告警中,再通過通知策略實現按照任意標簽分發告警。
原理
Prometheus中的kube-state-metrics提供了各個基礎資源的標簽指標,如kube_pod_labels、kube_node_labels等,記錄了每個資源的標簽。
在告警規則上配置特定的注釋(_aliyun_arms_enrich_desc),注釋內容是一個可執行的PromQL,在告警發生后告警引擎會通過查詢這個PromQL,將查詢出的標簽添加到告警中。
配置注釋內容為kube-state-metrics提供的標簽指標對應的查詢語句,對告警添加標簽。
操作步驟
將Kubernetes集群接入阿里云Prometheus監控。具體操作,請參見Prometheus實例 for 容器服務。
在ACK中部署應用。
在容器服務管理控制臺左側導航欄單擊集群,在集群列表頁面上的目標集群右側操作列單擊應用管理。
在無狀態頁面的目標應用右側選擇 。
在編輯YAML對話框添加自定義Label為
app:arms-prom-ack-arms-prometheus
。單擊更新。
創建Prometheus告警規則。
在ARMS控制臺左側導航欄,選擇 。
在Prometheus告警規則頁面的右上角單擊創建Prometheus告警規則。
在創建Prometheus告警規則頁面,設置告警名稱為EnrichDemo,告警條件為
當容器CPU使用率大于2%時,滿足告警條件。
參見Prometheus告警規則,設置其他告警參數,然后單擊保存。
為告警添加標簽。
在創建Prometheus告警規則頁面單擊高級設置右側箭頭,添加注釋。
注釋說明:
鍵:_aliyun_arms_enrich_desc。
值: 可執行的PromQL,支持通過
${xxx}
引用告警中的標簽,此處示例為kube_pod_labels{pod_name=${pod_name}}
,示例中使用了${pod_name}
來引用Pod名稱。
重要注釋值的內容必須是可以執行的PromQL。
執行PromQL查詢出的內容只能包含一條時間序列(timeseries)。
PromQL執行結果中查詢出來的所有標簽會被添加到告警中。
kube_pod_labels會對所有標簽的Key添加
label_
前綴,因此在最終使用時需要手動添加這個前綴。當查詢出來的結果超過10條時間線時,只能對前10條時間線富化標簽。
配置通知策略。
在通知策略頁面通過設置匹配告警事件規則為
label_app等于arms-prom-ack-arms-prometheus
訂閱告警。具體操作,請參見通知策略。在告警發送歷史頁面查看告警信息。更多信息,請參見查看告警發送歷史。