4. Alertmanager 基础:架构、分组、抑制与静默机制
Alertmanager 是 Prometheus 生态中负责告警路由、去重、分组、抑制和静默的核心组件。它接收来自 Prometheus 或其他兼容源的告警,通过灵活的配置将告警发送到正确的接收端(如邮件、PagerDuty、Slack),并有效防止告警风暴。本章深入剖析 Alertmanager 的内部架构与三大核心机制。
4.1 Alertmanager 架构概览
Alertmanager 采用管道式架构,告警从接收到发送经历多个处理阶段。理解其内部组件有助于精准排障与调优。
核心组件: Dispatcher(调度器)、Inhibition(抑制器)、Silence(静默器)、Receiver(接收器)。
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 分组工作流程
- 告警到达: Alertmanager 接收来自 Prometheus 的告警。
- 标签匹配: 根据
group_by中定义的标签提取分组键(如{alertname="HighCPU", severity="critical"})。 - 等待窗口: 启动
group_wait计时器,等待同一分组键的其他告警。 - 发送通知: 计时器到期后,将组内所有告警合并为一条通知发送。
- 后续更新: 在
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 静默的生命周期
- 创建: 通过 Alertmanager API 或 Web UI 创建静默规则,指定匹配标签、持续时间和创建者。
- 生效: 静默创建后立即生效,匹配的告警将不会触发通知,但告警状态仍会在 Alertmanager 中保留。
- 过期: 到达设定的结束时间后,静默自动过期,告警恢复正常通知。
- 手动过期: 管理员可随时手动过期静默,提前恢复通知。
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 到最终发送的完整决策路径。
关键结论: 分组减少通知数量,抑制消除冗余告警,静默提供人工干预能力。三者结合,确保告警通知既及时又精准,是构建可靠告警体系的基石。