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 触发到最终通知运维人员,经历四个关键阶段:触发 → 抑制 → 静默 → 发送。
生命周期关键点:抑制和静默虽然都用于减少告警噪音,但机制不同——抑制是自动的、基于规则的关联屏蔽;静默是手动的、基于匹配器的临时屏蔽。路由分层配置中,抑制规则通常定义在全局层级,静默则通过 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'],确保相同告警名称、相同严重级别、相同实例的告警被合并为一条通知,大幅降低告警噪音。