用 Alertmanager 做好告警管理:分组、路由、静默与抑制

Alertmanager 是 Prometheus 告警体系的调度中枢:分组降噪、按标签路由、静默窗口、告警抑制。核心概念与完整配置示例,附通知模板定制方法。

最佳实践
用 Alertmanager 做好告警管理:分组、路由、静默与抑制技术指南封面

Prometheus 负责评估规则"该不该告警",Alertmanager 负责"怎么告"——同样的 100 条原始告警,直接发是灾难(告警风暴),经过 Alertmanager 的分组、去重、路由后是一条聚合通知。理解这四个核心功能,告警体系才算完整。

Alertmanager 在链路中的位置

Prometheus 评估规则 → 产生告警 → Alertmanager
  → 去重(多个 Prom 实例发同一告警只留一份)
  → 分组(按标签聚合,一组一条通知)
  → 路由(按标签发给不同接收人)
  → 抑制(上游故障时压掉下游告警)
  → 静默(维护窗口不打扰)
  → 接收器(邮件/Slack/Webhook……)

基础配置骨架

# alertmanager.yml
global:
  smtp_smarthost: 'smtp.example.com:587'
  smtp_from: 'alert@example.com'

route:
  receiver: default          # 默认接收器
  group_by: ['alertname', 'severity']
  group_wait: 30s            # 组内等待:攒 30s 的告警一起发
  group_interval: 5m         # 同组后续告警的间隔
  repeat_interval: 4h        # 未恢复告警的重发间隔
  routes:
    - match: {severity: critical}
      receiver: oncall
    - match: {team: database}
      receiver: dba-team

receivers:
  - name: default
    email_configs:
      - to: ops@example.com
  - name: oncall
    webhook_configs:
      - url: http://oncall-system/hook

分组(Grouping):降噪第一招

一次数据库故障可能触发 50 个相关告警。group_by 把它们聚成一条通知:"HighErrorRate(critical):50 个实例受影响",而不是 50 条消息轰炸。group_wait 的存在就是为了"攒一攒再发"。

路由(Routing):对的人收对的告警

按标签分派:数据库告警给 DBA、前端告警给前端组、critical 打电话、warning 进 IM。match/match_re(正则)定义路由条件,未匹配的走默认接收器。

静默(Silence):维护窗口不打扰

发布、迁移、扩容期间,已知会产生的告警应该静默:

# amtool 命令行创建静默
amtool silence add severity=warning --duration=2h --comment="发版窗口"

Web UI 上也可操作。静默按匹配器生效,可以精确到单个实例。

抑制(Inhibition):上游故障压掉下游

数据库集群挂了 → 依赖它的 20 个服务全部报 HighErrorRate。抑制规则说:当"数据库宕机"这个 P0 告警存在时,压掉相关的下游告警

inhibit_rules:
  - source_match: {alertname: 'DatabaseDown'}
    target_match_re: {alertname: 'HighErrorRate|HighLatency'}
    equal: ['cluster']     # 同一集群内才抑制

值班人收到一条根因告警,而不是 21 条互相印证的噪声。

通知模板定制

Go template 语法定制通知内容,把关键信息(实例、数值、runbook 链接)塞进告警:

receivers:
  - name: oncall
    webhook_configs:
      - url: http://hook/alert
    email_configs:
      - to: ops@example.com
        html: '{{ template "custom.html" . }}'

一条好告警的标准格式:什么服务 + 什么现象 + 当前值 + 从何时开始 + runbook 链接

观测云对照

Alertmanager 的这些能力在观测云里是监控器的开箱功能:告警策略支持按维度分组聚合、分级通知(邮件/钉钉/企微/飞书/电话/Webhook)、静默与免打扰时段、以及基于关联规则的告警收敛;告警与指标/日志/Trace 同平台,点击告警直接跳到故障时刻的完整现场数据。已有 Prometheus 体系的告警规则也可以通过 remote write 指标继续复用。

常见问题(FAQ)

Q:Alertmanager 需要高可用吗?
A:生产建议跑 2-3 个实例组成集群(gossip 协议自动同步静默与通知状态)。单点 Alertmanager 挂了 = 所有告警静默,比没有监控更危险。

Q:告警发出去了但没人处理怎么办?
A:需要升级策略(escalation):Alertmanager 本身弱升级,配合值班系统(或观测云的告警升级策略)实现"15 分钟未确认 → 升级上级"。

Q:repeat_interval 设多少?
A:critical 建议 1-4 小时重发提醒;warning 可以 12-24 小时或干脆不重发。太频繁制造疲劳,太久会遗忘未恢复的告警。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台