2. Alertmanager 基础架构

Alertmanager 是 Prometheus 生态中负责告警路由、去重、分组、抑制、静默和发送的核心组件。理解其内部组件构成与告警生命周期,是掌握阈值路由分层配置的前提。

2.1 组件构成

Alertmanager 采用模块化设计,主要包含以下核心组件:

组件 职责 关键说明
Dispatcher 告警分发与路由 根据 route 配置将告警分配到对应的接收器(Receiver)
Inhibition 告警抑制 当高优先级告警触发时,自动屏蔽低优先级关联告警
Silence 告警静默 基于匹配规则临时屏蔽指定告警,常用于维护窗口
Receiver 告警发送 对接邮件、PagerDuty、Slack、Webhook 等通知渠道
Storage 告警状态存储 内存中维护告警活跃列表,可选持久化到磁盘
API 外部接口 提供 HTTP API 用于告警注入、静默管理、状态查询
架构要点:Dispatcher 是路由分发的核心引擎,Inhibition 和 Silence 是告警降噪的两大关键机制,Receiver 是告警最终触达运维人员的出口。

2.2 告警生命周期

一条告警从 Prometheus 触发到最终通知运维人员,经历四个关键阶段:触发 → 抑制 → 静默 → 发送。

告警生命周期流程图 ① 触发 Prometheus 发送告警 ② 抑制 Inhibition 过滤 ③ 静默 Silence 匹配 ④ 发送 Receiver 通知 抑制(Inhibition)规则示例 if: alertname = "InstanceDown" then: inhibit alertname = "HighLatency" 说明:主机宕机时,自动屏蔽该主机的延迟告警 静默(Silence)匹配规则 matchers: - severity = "warning" - env = "staging" 告警状态流转说明 • 触发:Prometheus 将告警推送至 Alertmanager API • 抑制:Dispatcher 检查 Inhibition 规则,被抑制的告警不进入后续流程
生命周期关键点:抑制和静默虽然都用于减少告警噪音,但机制不同——抑制是自动的、基于规则的关联屏蔽;静默是手动的、基于匹配器的临时屏蔽。路由分层配置中,抑制规则通常定义在全局层级,静默则通过 API 或 UI 按需创建。

2.3 配置文件结构概览

Alertmanager 的配置文件采用 YAML 格式,核心结构如下:

# alertmanager.yml 核心结构
global:
  resolve_timeout: 5m
  smtp_from: 'alert@example.com'
  smtp_smarthost: 'smtp.example.com:587'

route:
  receiver: 'default-receiver'
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h
  routes:
    - match:
        severity: 'critical'
      receiver: 'pager-duty'
      repeat_interval: 10m

receivers:
  - name: 'default-receiver'
    email_configs:
      - to: 'team@example.com'

  - name: 'pager-duty'
    pagerduty_configs:
      - routing_key: 'YOUR_KEY'

inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'instance']

2.4 配置层级与路由匹配逻辑

配置文件采用树形层级结构,路由匹配遵循以下原则:

  • 全局配置(global):定义所有接收器的默认参数,如超时时间、SMTP 服务器
  • 根路由(route):定义默认接收器和分组参数,所有告警首先匹配根路由
  • 子路由(routes):基于标签匹配进行分支路由,支持多级嵌套
  • 接收器(receivers):定义通知渠道的具体配置,可包含多个通知方式
  • 抑制规则(inhibit_rules):定义告警间的依赖与屏蔽关系
常见配置陷阱:子路由的匹配顺序是从上到下,一旦匹配成功则不再继续匹配后续子路由。如果子路由没有设置 continue: true,匹配到的告警不会继续向父路由的默认接收器发送。在分层路由设计中,建议在关键节点设置 continue: true 以实现告警的广播分发。

2.5 告警分组与去重机制

Alertmanager 通过分组机制将相似的告警合并为一条通知,避免告警风暴:

参数 默认值 作用
group_wait 30s 等待同一分组内的告警到达,合并后发送
group_interval 5m 同一分组两次通知之间的最小间隔
repeat_interval 4h 告警未解决时,重复发送通知的间隔
group_by ['alertname'] 定义分组的标签键列表
分层配置实战提示:在阈值路由分层配置中,建议将 group_by 设置为 ['alertname', 'severity', 'instance'],确保相同告警名称、相同严重级别、相同实例的告警被合并为一条通知,大幅降低告警噪音。