配置報警
我們知道了如何去添加一個報警規則配置項,但是這些報警資訊用怎樣的方式去發送呢?前面的課程中我們知道我們可以通過 AlertManager 的配置檔案去配置各種報警接收器,現在我們是通過 Operator 提供的 alertmanager 資源對象建立的元件,應該怎樣去修改配置呢?
首先我們去 Alertmanager 的頁面上
status
路徑下面檢視 AlertManager 的配置資訊:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cGcq5iMxIzM4gTY2kjNjFGN2ImZyYzX2MDNzcTM2EzLchDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.jpg)
這些配置資訊實際上是來自于 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 界面的配置内容: