Prometheus Rule功能介紹
Prometheus Rule 是用於在 Prometheus 中定義規則的 YAML 配置文件。它可以根據指定的表達式或條件對 metrics 進行匹配和計算,並在達到一定條件時生成警報或創建新的 metrics。
Prometheus Rule 的主要功能如下:
- Metrics 計算:通過表達式對符合條件的 metrics 進行匹配和計算,生成新的 metrics。
- 警報:當符合指定條件的 metrics 達到一定閾值時,生成警報。
- 規則繫結:可以為指定的 metrics 繫結指定的規則,進行自動化的警報觸發。
- 標註註釋:在生成警報時可以加上自定義的標註和註釋,方便後續的統計和分析。
通常在配合 Grafana 等圖形化界面使用時,Prometheus Rule 可以讓用戶方便的自定義需要監控的 metrics,並在 Grafana 上實現對這些 metrics 的實時監控和報警,以實現系統的實時監控和異常處理。
設定Prometheus Rule
這是一個 PrometheusRule YAML 配置文件,用於定義 Prometheus 規則,以檢測和警報指定的 metrics。
apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: labels: name: srs-online-member name: srs-online-member namespace: stu-srs spec: groups: - name: srs-online-member rules: - expr: sum(stream_clients_clients{container="json-exporter", name=~".+",namespace=~"stu-srs",pod=~"srs-edge.+"}) by (pod) labels: name: online-member-high namespace: stu-srs service: eventqueue record: stream_total_clients_by_pod - name: quay-alert.rules rules: - alert: online-member-full annotations: message: online-member-full {{ $labels.pod }} at {{ $value }}% expr: sum(stream_clients_clients{container="json-exporter", name=~".+",namespace=~"stu-srs",pod=~"srs-edge.+"}) by (pod) > 1000 for: 5m labels: severity: warning
該文件定義了兩個規則組,每個規則組包含一個或多個規則。
第一個規則組名為 srs-online-member
,包含一個規則。該規則通過表達式 sum(stream_clients_clients{container="json-exporter", name=~".+",namespace=~"stu-srs",pod=~"srs-edge.+"}) by (pod)
求和符合條件的 metrics,這些 metrics 包含在 stream_clients_clients 中,該 metrics 必須滿足以下條件:在命名空間 stu-srs 中,容器名稱為 json-exporter,Pod 名稱符合正則表達式 srs-edge.+。
如果條件滿足,Prometheus 將會創建一個名為 stream_total_clients_by_pod
的時間序列,其中 pod 是標籤,值是符合條件的 Pod 名稱,這樣可以讓你在 Grafana 等圖形化界面上顯示時間序列並進行分析。
第二個規則組名為 quay-alert.rules
,包含一個警報規則。該規則通過表達式 sum(stream_clients_clients{container="json-exporter", name=~".+",namespace=~"stu-srs",pod=~"srs-edge.+"}) by (pod) > 1000
檢查符合條件的 metrics 是否大於 1000。如果條件滿足 5 分鐘以上,Prometheus 將會發出名為 online-member-full 的警報,並設置一些額外的標籤和注釋以便進一步分析。
設定alert規則
我們也可以在Rule裡面設定Alert的規則,當有labels的Severity為warning時,就代表這個rule為一個告警,下面是代表當pod的人數大於1000多過五分鐘時,會觸發告警
- name: quay-alert.rules rules: - alert: online-member-full annotations: message: online-member-full {{ $labels.pod }} at {{ $value }}% expr: sum(stream_clients_clients{container="json-exporter", name=~".+",namespace=~"default",pod=~"my-pod.+"}) by (pod) > 1000 for: 5m labels: severity: warning
可以在Prometheus Web UI的Alert頁籤裡找到這個設定值