4. Alertmanager 基础:架构、分组、抑制与静默机制

Alertmanager 是 Prometheus 生态中负责告警路由、去重、分组、抑制和静默的核心组件。它接收来自 Prometheus 或其他兼容源的告警,通过灵活的配置将告警发送到正确的接收端(如邮件、PagerDuty、Slack),并有效防止告警风暴。本章深入剖析 Alertmanager 的内部架构与三大核心机制。

4.1 Alertmanager 架构概览

Alertmanager 采用管道式架构,告警从接收到发送经历多个处理阶段。理解其内部组件有助于精准排障与调优。

核心组件: Dispatcher(调度器)、Inhibition(抑制器)、Silence(静默器)、Receiver(接收器)。
Alertmanager 内部处理管道 Prometheus 告警 分组 (Grouping) 抑制 (Inhibition) 静默 (Silence) 路由 & 发送 邮件 / Slack / PagerDuty 处理流程说明: 1. Prometheus 推送告警到 Alertmanager 的 API 入口。 2. 分组阶段将相似告警合并为一条通知,减少冗余。 3. 抑制阶段根据依赖关系屏蔽次要告警。 4. 静默阶段根据管理员配置的规则过滤告警。 5. 最终告警通过路由树匹配到对应的接收器发送。

4.2 分组机制 (Grouping)

分组是 Alertmanager 防止告警风暴的第一道防线。它将同一时间窗口内、具有相同标签集的告警合并为一条通知,显著减少接收端的噪音。

4.2.1 分组配置参数

参数 说明 典型值
group_by 指定用于分组的标签列表。告警中这些标签的值相同则归为一组。 ['alertname', 'severity']
group_wait 首次告警到达后等待后续告警的时间,超时后发送第一组通知。 30s
group_interval 同一组告警在发送后,再次发送新通知的最小间隔。 5m
repeat_interval 告警组已发送后,若告警仍处于 firing 状态,重新发送通知的间隔。 4h
最佳实践: 对于高频率的告警(如实例心跳),建议将 group_wait 设置稍长(如 1-2 分钟),以收集更多上下文;对于关键告警(如 P0 级),应缩短 group_wait 以快速触发通知。

4.2.2 分组工作流程

  1. 告警到达: Alertmanager 接收来自 Prometheus 的告警。
  2. 标签匹配: 根据 group_by 中定义的标签提取分组键(如 {alertname="HighCPU", severity="critical"})。
  3. 等待窗口: 启动 group_wait 计时器,等待同一分组键的其他告警。
  4. 发送通知: 计时器到期后,将组内所有告警合并为一条通知发送。
  5. 后续更新: 在 group_interval 内,组内新告警不会触发新通知;超过 group_interval 后,若有新告警或状态变化,再次发送。

4.3 抑制机制 (Inhibition)

抑制用于消除由同一根本原因引发的冗余告警。例如,当节点宕机时,该节点上的所有服务告警都应被抑制,直到节点恢复。

4.3.1 抑制规则配置

inhibit_rules:
  - source_matchers:
      - severity = critical
      - alertname = NodeDown
    target_matchers:
      - severity =~ warning|info
    equal:
      - instance
字段 说明
source_matchers 定义源告警(根本原因告警)的匹配条件。
target_matchers 定义被抑制告警的匹配条件。
equal 源告警和目标告警必须具有相同值的标签列表,确保抑制只作用于同一资源。
注意: 抑制规则是单向的。源告警必须处于 firing 状态才能抑制目标告警。如果源告警 resolved,抑制自动解除。

4.3.2 抑制示例场景

  • 基础设施故障: 主机宕机(源)抑制该主机上的所有进程/服务告警(目标)。
  • 级联故障: 数据库不可用(源)抑制依赖该数据库的应用层告警(目标)。
  • 维护窗口: 通过临时创建高优先级告警作为源,抑制同一资源上的低优先级告警。

4.4 静默机制 (Silence)

静默允许管理员在特定时间段内,根据标签匹配规则有选择地屏蔽告警通知。常用于计划内维护、已知问题临时容忍等场景。

4.4.1 静默的生命周期

  1. 创建: 通过 Alertmanager API 或 Web UI 创建静默规则,指定匹配标签、持续时间和创建者。
  2. 生效: 静默创建后立即生效,匹配的告警将不会触发通知,但告警状态仍会在 Alertmanager 中保留。
  3. 过期: 到达设定的结束时间后,静默自动过期,告警恢复正常通知。
  4. 手动过期: 管理员可随时手动过期静默,提前恢复通知。

4.4.2 静默配置示例

# 通过 API 创建静默
POST /api/v2/silences
{
  "matchers": [
    {
      "name": "instance",
      "value": "web-server-01",
      "isRegex": false
    },
    {
      "name": "severity",
      "value": "warning",
      "isRegex": false
    }
  ],
  "startsAt": "2025-04-01T00:00:00Z",
  "endsAt": "2025-04-02T00:00:00Z",
  "createdBy": "admin",
  "comment": "计划内维护:web-server-01 升级"
}

4.4.3 静默与抑制的区别

特性 静默 (Silence) 抑制 (Inhibition)
触发方式 手动创建或 API 调用 自动由源告警触发
作用范围 匹配标签的所有告警 源告警与目标告警之间的依赖关系
生命周期 固定时间段或手动过期 随源告警状态变化(firing 时生效,resolved 后解除)
典型用途 计划维护、已知问题临时容忍 消除级联告警、减少告警风暴

4.5 三大机制协同工作

在实际生产环境中,分组、抑制、静默按顺序协同处理告警流。下图展示了告警从进入 Alertmanager 到最终发送的完整决策路径。

告警处理决策流程 告警到达 分组 (Grouping) 抑制 (Inhibition) 静默 (Silence) 发送通知 / 丢弃
关键结论: 分组减少通知数量,抑制消除冗余告警,静默提供人工干预能力。三者结合,确保告警通知既及时又精准,是构建可靠告警体系的基石。