監控要告警啊 AlertManager

上一篇,有提到這段敘述:

  • AlertManager:收集來自Prometheus ServerAlert event,並可整合第三方、自訂的告警模式來發送警報,例如:SlackE-mail、與其他 Webhook 等等。

  • AlertManager 可定義收到的告警事件如何分類、處理重複性告警、發送管道等等。

下列我們將簡略提到告警配置的概念。

安裝

稍早透過HELM安裝stable/prometheus-operator時,其指定的values.yaml中啟用alertmanager即可。

alertmanager:
## Deploy alertmanager
##
enabled: true

告警配置

Prometheus Server

首先需在Prometheus Server定義ScrapeConfig(Targets)監控對象。 凡不符合下列規則的監控目標,即會發送 alert event AlertManeger服務。

  • job_nameScrape 目標,以job為配置單位。

  • static_configs:設定監控目標。

  • relabel_configs:相關label指定、替換規則。

additionalScrapeConfigs:
- job_name: "web-service"
scrape_interval: 15s
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets: # 要檢查的網址
# 檢查監控端狀態的服務網址
- https://grafana.url.com.tw
- https://kibana.url.com.tw
- https://prometheus.url.com.tw
- https://es-client.url.com.tw
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox-exporter:9115

Alert Manager

再來是AlertManager面向的設定

  • global:預設配置參數。

  • route:收到符合match條件的規則,透過receivers發送alert event。

  • receivers:定義接受告警的管道,與吿警內容格式定義。

config:
global:
resolve_timeout: 2m # 未收到標記告警通知,等待 timeout 時間之後事件標記為 resolve。
route:
group_by: [prometheus, alertname]
group_wait: 30s
group_interval: 5m # 重複發送告警的間隔時間
repeat_interval: 12h
receiver: slack-receiver
routes:
# 範例:符合 alertname = Watchdog 條件者,不進行通知。
- receiver: 'null'
match:
alertname: Watchdog
# 範例:符合 prometheus = 指定特定環境,將告警事件透過 k8s-receiver 發送通知。
- receiver: 'k8s-receiver'
group_wait: 30s
match:
prometheus: namespace/prometheus-operator-prometheus
# 設定通知管道
receivers:
# 黑洞
- name: 'null'
# 預設 Slace channel
- name: slack-receiver
slack_configs:
- api_url: "https://hooks.slack.com/services/dlksdjfio/sljfidjo/dlksjjsioij"
channel: "#channel-name"
title: "{{ .CommonAnnotations.env }}: {{ .CommonAnnotations.summary }}"
text: "{{ range .Alerts }}{{ .Annotations.message }}\n{{ end }}"
send_resolved: true
# 設定另一組 Slack channel
- name: k8s-receiver
slack_configs:
- api_url: "https://hooks.slack.com/services/dlksdjfio/djofjido/alsjdiodjoj"
channel: "#channel-name2"
title: "K8s : {{ .CommonAnnotations.summary }}"
text: "{{ range .Alerts }}{{ .Annotations.message }}\n{{ end }}"
send_resolved: true