3. 告警降噪规则体系总览:OnCall中降噪规则的分类与执行顺序
在Grafana OnCall的工程实践中,告警降噪并非单一策略,而是一套由四种核心规则构成的协同体系。每种规则解决不同维度的噪声问题,且遵循严格的执行优先级。理解这套体系是落地降噪工程的第一步。
3.1 降噪规则的四大分类
OnCall将降噪规则分为以下四类,分别对应告警生命周期的不同阶段:
| 规则类型 | 英文名称 | 核心目标 | 典型场景 |
|---|---|---|---|
| 去重 | Deduplication | 消除完全重复的告警事件 | 同一故障触发多次相同告警 |
| 抑制 | Suppression | 在已知故障期间屏蔽关联告警 | 维护窗口、已知故障期间屏蔽下游告警 |
| 分组 | Grouping | 将相关告警聚合为单个告警组 | 同一主机CPU、内存、磁盘告警合并 |
| 速率限制 | Rate Limiting | 控制单位时间内告警通知的频率 | 防止告警风暴淹没通知渠道 |
工程要点: 四种规则并非互斥,实际生产中通常组合使用。例如:先去重消除重复,再分组聚合同类,最后通过速率限制控制通知节奏。
3.2 规则执行顺序与优先级
Grafana OnCall的降噪引擎按照严格有序的流水线处理每条传入告警。规则的执行顺序决定了降噪效果,错误顺序可能导致规则失效。
执行流水线(从先到后):
1. 去重 → 2. 抑制 → 3. 分组 → 4. 速率限制
1. 去重 → 2. 抑制 → 3. 分组 → 4. 速率限制
每条告警进入系统后,依次经过四个阶段,每个阶段都有独立的判定逻辑:
- 去重阶段: 基于指纹(fingerprint)匹配,若发现完全相同的告警,则直接丢弃,不进入后续阶段。
- 抑制阶段: 检查是否存在活跃的抑制规则。若告警匹配某条抑制规则,则被标记为“已抑制”,不再触发通知,但仍会进入分组阶段用于统计。
- 分组阶段: 根据分组规则将告警归入对应的告警组。分组规则基于标签(labels)或告警内容进行聚合。
- 速率限制阶段: 对最终需要发送通知的告警组或单个告警进行频率控制,确保通知渠道不被冲垮。
3.3 规则优先级与冲突处理
当多条规则同时生效时,OnCall遵循以下优先级原则:
- 去重规则优先级最高: 一旦匹配去重规则,告警立即被丢弃,后续规则不再执行。
- 抑制规则优先级高于分组: 被抑制的告警虽然进入分组阶段,但不会触发通知,分组仅用于统计和视图展示。
- 分组规则内部按创建时间排序: 当告警匹配多个分组规则时,优先使用最早创建的分组规则。
- 速率限制作用于最终输出: 速率限制是最后一道防线,对所有通过前三个阶段、需要发送通知的告警或告警组生效。
常见误区: 不要将速率限制放在分组之前。如果先限速再分组,可能导致同一告警组内的部分告警被限速丢弃,造成告警组不完整,影响故障排查。
3.4 规则体系架构总览
下图展示了四种降噪规则在OnCall整体架构中的位置及其与告警源、通知渠道的关系:
3.5 规则配置清单速查
在工程落地时,建议按照以下清单检查降噪规则配置的完整性:
| 检查项 | 规则类型 | 配置建议 | 优先级 |
|---|---|---|---|
| 指纹去重 | 去重 | 基于告警名称+实例标签生成指纹 | P0 |
| 维护窗口抑制 | 抑制 | 按时间窗口+服务标签匹配 | P0 |
| 已知故障抑制 | 抑制 | 按故障ID标签匹配 | P1 |
| 服务级分组 | 分组 | 按service标签聚合,超时5分钟 | P1 |
| 主机级分组 | 分组 | 按host标签聚合,超时10分钟 | P2 |
| 通知频率限制 | 速率限制 | 每分钟最多1条通知 | P1 |
最佳实践: 建议先在测试环境中按“去重→抑制→分组→速率限制”的顺序创建规则,并使用OnCall的“测试告警”功能验证每条规则的效果,确认无误后再应用到生产环境。