文章目錄
Prometheus 搭配 Alertmanager 發送警示
之前筆記 使用 ElastAlert 監控 Elasticsearch 發出通知 提到近期都在進行主動監控的相關設定與測試,之前紀錄了 Elasticsearch 上使用 application 所產生的 log 內容來進行條件偵測與通知,今天要來紀錄如何為 infrastructure 層中 server 及 service 的可用性加上主動通知
今天筆記分別測試了 email
與 webhook
功能
建議可以先了解架構部份,詳細內容請參考官網 OVERVIEW
圖片出處 OVERVIEW
基本環境說明
- macOS Catalina 10.15.7
- docker desktop 3.1.0 (51484)
- Fiddler Everywhere 1.5.0
Helm charts
- prometheus-community/kube-prometheus-stack 13.2.1
docker images
- quay.io/prometheus-operator/prometheus-config-reloader v0.45.0
- quay.io/prometheus-operator/prometheus-operator v0.45.0
- quay.io/prometheus/prometheus v2.24.0
- quay.io/prometheus/alertmanager v0.21.0
設定方式
helm repo 設定
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts && helm repo update
設定 Prometheus 的 alert rule
這個就先略過,使用內建 rule 來觸發就好,以這篇筆記使用的 helm chart 有以下這些 內建 rule
建立 AlertManager 的 alert 發送規則
以下使用
testalert.yaml
做為範例alertmanager: config: global: smtp_smarthost: 'smtp.mailtrap.io:2525' smtp_auth_username: 'username' smtp_auth_password: 'password' smtp_from: '[email protected]' route: group_by: ['alertname', 'prometheus'] # 用來將 alert 分群 receiver: 'webhook' # `webhook` 預設接收者 routes: - receiver: 'null' # 符合 `alertname: Watchdog` 就由 `null` 處理 match: alertname: Watchdog - receiver: 'email' # 符合 `severity: critical` 就由 `email` 處理 match: severity: critical receivers: - name: 'null' # 不做事 - name: 'email' email_configs: # 指定 email config 來處理 - to: '[email protected]' - name: 'webhook' webhook_configs: # 指定 webhook config 來處理 - url: 'http://blog.yowko.com' http_config: proxy_url: 'http://192.168.80.3:8866' # proxy 是個人 debug 用途
使用 AlertManager 的 alert 發送規則 進行部署
helm install testalert prometheus-community/kube-prometheus-stack -f testalert.yaml
實際效果
null
不會收到預設
alertname: Watchdog
的通知email
因為
severity: critical
match 會收到 emailwebhook
因為未 match
severity: critical
與alertname: Watchdog
心得
測試及 debug 工具
開啟 alertmanager ui ui port forward
kubectl --namespace default port-forward alertmanager-testalert-kube-prometheus-alertmanager-0 9093
開啟 prometheus-server ui port forward
kubectl --namespace default port-forward prometheus-testalert-kube-prometheus-prometheus-0 9090
調整 alertmanager log level
修改
testalert.yaml
, 搭配kubectl logs -f alertmanager-testalert-kube-prometheus-alertmanager-0 -c alertmanager
看 logalertmanager: alertmanagerSpec: logLevel: debug
手動發送 alert event
curl -H "Content-Type: application/json" -d '[{"labels":{"alertname":"test-email","severity":"critical"}}]' localhost:9093/api/v1/alerts && curl -H "Content-Type: application/json" -d '[{"labels":{"alertname":"test-webhook"}}]' localhost:9093/api/v1/alerts
參考資訊
文章作者 Yowko Tsai
上次更新 2021-01-27
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。