Alertmanager配置概述
Alertmanager主要負責對Prometheus產生的告警進行統一處理,因此在Alertmanager配置中一般會包含以下幾個主要部分:
- 全局配置(global):用於定義一些全局的公共參數,如全局的SMTP配置,Slack配置等內容;
- 模板(templates):用於定義告警通知時的模板,如HTML模板,郵件模板等;
- 告警路由(route):根據標簽匹配,確定當前告警應該如何處理;
- 接收人(receivers):接收人是一個抽象的概念,它可以是一個郵箱也可以是微信,Slack或者Webhook等,接收人一般配合告警路由使用;
- 抑制規則(inhibit_rules):合理設置抑制規則可以減少垃圾告警的產生
默認配置文件如下
[root@node00 ~]# cd /usr/local/prometheus/alertmanager/ [root@node00 alertmanager]# cat alertmanager.yml.default global: resolve_timeout: 5m route: group_by: ['alertname'] group_wait: 10s group_interval: 10s repeat_interval: 1h receiver: 'web.hook' receivers: - name: 'web.hook' webhook_configs: - url: 'http://127.0.0.1:5001/' inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance']
global配置:
global: [ resolve_timeout: <duration> | default = 5m ] [ smtp_from: <tmpl_string> ] [ smtp_smarthost: <string> ] [ smtp_hello: <string> | default = "localhost" ] [ smtp_auth_username: <string> ] [ smtp_auth_password: <secret> ] [ smtp_auth_identity: <string> ] [ smtp_auth_secret: <secret> ] [ smtp_require_tls: <bool> | default = true ] [ slack_api_url: <secret> ] [ victorops_api_key: <secret> ] [ victorops_api_url: <string> | default = "https://alert.victorops.com/integrations/generic/20131114/alert/" ] [ pagerduty_url: <string> | default = "https://events.pagerduty.com/v2/enqueue" ] [ opsgenie_api_key: <secret> ] [ opsgenie_api_url: <string> | default = "https://api.opsgenie.com/" ] [ hipchat_api_url: <string> | default = "https://api.hipchat.com/" ] [ hipchat_auth_token: <secret> ] [ wechat_api_url: <string> | default = "https://qyapi.weixin.qq.com/cgi-bin/" ] [ wechat_api_secret: <secret> ] [ wechat_api_corp_id: <string> ] [ http_config: <http_config> ]
- resolve_timeout: 這個解釋有點繞,簡單說就是在報警恢復的時候不是立馬發送的,在接下來的這個時間內,如果沒有此報警信息觸發,才發送報警恢復消息。 默認值為5m。
- smtp_from: 發件人郵箱地址。
- smtp_smarthost: 發件人對應郵件提供商的smtp地址。
- smtp_auth_username: 發件人的登陸用戶名,默認和發件人地址一致。
- smtp_auth_password: 發件人的登陸密碼,有時候是授權碼。
- smtp_require_tls: 是否需要tls協議。默認是true。
- wechart_api_url: 微信api地址。
- wechart_api_secret: 密碼
- wechat_api_corp_id: corp id信息。
templates配置
模板用於控制我們發送的消息格式控制和內容組織的,我們可以自定義一個模板, 模板中引用alertmanager提供的一些內置變量,最終完成消息的渲染。
樣例如下:
# alertmanager配置文件 templates: - '/usr/local/prometheus/alertmanager/templates/myorg.tmpl' # cat /usr/local/prometheus/alertmanager/templates/myorg.tmpl {{ define "slack.myorg.text" }}https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}{{ end}}
receivers配置
receivers: - name: 'email-zhaojiedi' email_configs: - to: '1072892917@qq.com' - name: 'hipchat-zhaojiedi' hipchat_configs: - auth_token: <auth_token> room_id: 85 message_format: html notify: true - name: 'pagerduty-zhaojiedi' pagerduty_configs: - service_key: <team-DB-key> - name: 'opt-webhook' send_resolved: true url: "http://xxxxx.xxx.com/5002/dingding/xxx/send/
官方提供很多receviers的配置格式, 詳細的參考官方文檔: https://prometheus.io/docs/alerting/configuration/#receiver
route配置
routes: - match_re: service: ^(foo1|foo2|baz)$ receiver: team-X-mails routes: - match: severity: critical receiver: team-X-pager - match: service: files receiver: team-Y-mails routes: - match: severity: critical receiver: team-Y-pager - match: service: database receiver: team-DB-pager # Also group alerts by affected database. group_by: [alertname, cluster, database] routes: - match: owner: team-X receiver: team-X-pager continue: true - match: owner: team-Y receiver: team-Y-pager
這個配置文件時從alertmanager官方的github上面找到的。 地址如下: https://github.com/prometheus/alertmanager/blob/master/doc/examples/simple.yml , 我們可以通過官方的工具來看下這個路由樹是什么樣的。
inhibit_rules配置
我們知道alertmanager對報警有抑制工程, 可以通過一定的規則,抑制一些報警消息,比如如下場景。
場景1 : 磁盤報警,80%報警設置為info級別,90設置為警告級別, 如果2個消息都發送,那就多余了。 我們需要設置相同報警高級別壓制低級別的報警,只發送高級別的報警信息。
場景2: 節點宕機了, 在這個節點上面的各種服務報警都會觸發的, 如果都發送不太方便定位問題,還容易帶來巨大的壓力。可以配置節點宕機壓制節點層面的其他報警信息。
樣例配置如下:
inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' # Apply inhibition if the alertname is the same. equal: ['alertname' ]
通過上面的配置,可以在alertname相同的情況下,critaical的報警會抑制warning級別的報警信息。
靜默配置
靜默配置是通過web界面配置的, 如下圖。
進入靜默配置頁面