天天看點

Prometheus Operator 配置報警

配置報警

我們知道了如何去添加一個報警規則配置項,但是這些報警資訊用怎樣的方式去發送呢?前面的課程中我們知道我們可以通過 AlertManager 的配置檔案去配置各種報警接收器,現在我們是通過 Operator 提供的 alertmanager 資源對象建立的元件,應該怎樣去修改配置呢?

首先我們去 Alertmanager 的頁面上 ​

​status​

​ 路徑下面檢視 AlertManager 的配置資訊:

Prometheus Operator 配置報警

這些配置資訊實際上是來自于 Prometheus-Operator 自動建立的名為 ​

​alertmanager-main-generated​

​ 的 Secret 對象:

☸ ➜ kubectl get secret alertmanager-main-generated -n monitoring -o json | jq -r '.data."alertmanager.yaml"' | base64 --decode
"global":
  "resolve_timeout": "5m"
"inhibit_rules":
- "equal":
  - "namespace"
  - "alertname"
  "source_matchers":
  - "severity = critical"
  "target_matchers":
  - "severity =~ warning|info"
- "equal":
  - "namespace"
  - "alertname"
  "source_matchers":
  - "severity = warning"
  "target_matchers":
  - "severity = info"
- "equal":
  - "namespace"
  "source_matchers":
  - "alertname = InfoInhibitor"
  "target_matchers":
  - "severity = info"
"receivers":
- "name": "Default"
- "name": "Watchdog"
- "name": "Critical"
- "name": "null"
"route":
  "group_by":
  - "namespace"
  "group_interval": "5m"
  "group_wait": "30s"
  "receiver": "Default"
  "repeat_interval": "12h"
  "routes":
  - "matchers":
    - "alertname = Watchdog"
    "receiver": "Watchdog"
  - "matchers":
    - "alertname = InfoInhibitor"
    "receiver": "null"
  - "matchers":
    - "severity = critical"
    "receiver": "Critical"      

我們可以看到内容和上面檢視的配置資訊是一緻的,是以如果我們想要添加自己的接收器,我們就可以直接更改這個檔案,但是這裡的内容是 base64 編碼過後的,如果手動添加内容就非常不友善,為此 Prometheus-Operator 新增了一個 ​

​AlertmanagerConfig​

​​ 的 CRD(專門用來配置altermanager),比如我們将 ​

​Critical​

​ 這個接收器的報警資訊都發送到釘釘進行報警。

首先在 monitoring 命名空間下面部署一個簡單的釘釘 webhook 處理器,前面 Alertmanager 章節已經學習過,這裡就不贅述了。

然後建立一個 ​

​AlertmanagerConfig​

​​ 類型的資源對象,可以通過 ​

​kubectl explain alertmanagerconfig​

​​ 或者​​線上 API 文檔​​來檢視字段的含義

# alertmanager-config.yaml
apiVersion: monitoring.coreos.com/v1alpha1
kind: AlertmanagerConfig
metadata:
  name: dinghook
  namespace: monitoring
  labels:
    alertmanagerConfig: example
spec:
  receivers:
    - name: Critical
      webhookConfigs:
        - url: http://<webhook-url>
          sendResolved: true
  route:
    groupBy: ["namespace"]
    groupWait: 30s
    groupInterval: 5m
    repeatInterval: 12h
    receiver: Critical
    routes:
      - receiver: Critical
        match:
          severity: critical      

不過如果直接建立上面的配置是不會生效的,我們需要添加一個 Label 标簽,并在 Alertmanager 的資源對象中通過标簽來關聯上面的這個對象,比如我們這裡新增了一個 Label 标簽:​

​alertmanagerConfig: example​

​​,然後需要重新更新 Alertmanager 對象,添加 ​

​alertmanagerConfigSelector​

​​ 屬性去比對 ​

​AlertmanagerConfig​

​ 資源對象:

# alertmanager-alertmanager.yaml
apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
  labels:
    alertmanager: main
  name: main
  namespace: monitoring
spec:
  image: quay.io/prometheus/alertmanager:v0.21.0
  nodeSelector:
    kubernetes.io/os: linux
  replicas: 3
  securityContext:
    fsGroup: 2000
    runAsNonRoot: true
    runAsUser: 1000
  serviceAccountName: alertmanager-main
  version: v0.21.0
  configSecret:
  alertmanagerConfigSelector: # 比對 AlertmanagerConfig 的标簽
    matchLabels:
      alertmanagerConfig: example      

現在我們重新更新上面的資源對象:

kubectl apply -f alertmanager-config.yaml
kubectl apply -f alertmanager-alertmanager.yaml      

更新完成後預設的配置會和我們建立的配置進行合并,我們可以重新檢視生成的 Secret 資源對象内容,也可以直接檢視 Alertmanager 的 WEB UI 界面的配置内容:

Prometheus Operator 配置報警