智能降噪
概述
告警噪音是 On-Call 团队面临的最大挑战之一。大量重复、低优先级或短暂性告警会淹没真正重要的问题,导致告警疲劳和响应延迟。
1Duty 提供五重降噪引擎,从不同维度对告警进行过滤和优化:
- 告警聚合 - 将相同或相似的告警合并为一个事件
- 排除规则 - 直接丢弃不需要关注的告警
- 静默策略 - 在特定条件或时间段内抑制通知
- 抖动检测 - 识别并抑制频繁告警恢复的抖动场景
- 自动关闭 - 超时或满足条件时自动关闭事件
五重降噪引擎协同工作,可减少 90% 以上的告警噪音。
告警聚合 (Aggregation)
告警聚合将相同或相似的告警合并为同一个事件,避免相同问题重复创建事件。1Duty 提供三种聚合模式:
智能聚合
系统基于告警标题的哈希值自动判断告警是否相同。标题相同的告警会被聚合到同一事件中。这是最简单的聚合方式,无需额外配置。
自定义规则聚合
通过 Aviator 表达式自定义聚合 Key,支持更灵活的聚合策略。聚合 Key 相同的告警将被合并到同一事件。
## 示例:按标题和主机名组合聚合
title + '_' + host
## 示例:按服务名和告警级别聚合
service + '_' + severity
## 示例:按告警来源聚合
channelName + '_' + webHookName
不聚合
每条告警都会创建一个独立的事件。适用于每条告警都需要单独处理的场景。
聚合窗口
聚合窗口定义了告警合并的时间范围,可设置为 1 - 1440 分钟(即最长 24 小时)。在聚合窗口内,具有相同聚合 Key 的告警将合并到同一个事件中。窗口过期后,相同 Key 的新告警将创建新的事件。
建议根据告警的恢复周期设置聚合窗口。例如,如果一个告警通常在 30 分钟内恢复,可以将聚合窗口设置为 60 分钟。
排除规则 (Exclusion)
排除规则用于直接丢弃满足条件的告警,这些告警不会创建事件,也不会触发通知。适用于已知的无效告警或不需要关注的低优先级告警。
普通条件
通过字段 + 操作符 + 值的方式定义匹配条件,支持以下操作符:
| 操作符 | 说明 | 示例 |
|---|---|---|
| 包含 | 字段值包含指定字符串 | title 包含 "test" |
| 不包含 | 字段值不包含指定字符串 | title 不包含 "heartbeat" |
| 等于 | 字段值完全等于指定字符串 | severity 等于 "info" |
| 不等于 | 字段值不等于指定字符串 | severity 不等于 "critical" |
| 正则匹配 | 字段值匹配正则表达式 | title 正则匹配 "test-.*-dev" |
| 正则不匹配 | 字段值不匹配正则表达式 | host 正则不匹配 "prod-.*" |
Aviator 脚本
当普通条件无法满足需求时,可以使用 Aviator 表达式编写自定义排除逻辑:
## 示例:排除测试环境的 info 级别告警
string.contains(title, "test") && severity == "info"
## 示例:排除特定主机的磁盘告警
string.startsWith(host, "backup-") && string.contains(title, "disk")
多条件关系
当配置多条排除规则时,各规则之间为 OR(或)关系,即满足任意一条规则的告警都将被排除。
静默策略 (Silence)
静默策略与排除规则不同:满足静默条件的告警仍然会创建事件,但不会发送通知。适用于计划内维护、已知问题等场景。
静默时长
静默时长定义了匹配告警被静默的持续时间,可设置为 1 - 10080 分钟(即最长 7 天)。在静默时长内,同一事件的后续告警也不会触发通知。
时间段限制
可以为静默策略配置生效的时间段,实现更精准的静默控制:
- 周几 - 选择策略生效的星期几(可多选)
- 时间范围 - 设置每天的生效时间段(如 00:00 - 08:00)
例如,可以配置"每周六、周日全天静默非严重告警"或"每天凌晨 2:00-4:00 静默数据库维护告警"。
条件配置
静默策略的条件配置方式与排除规则相同,支持普通条件和 Aviator 脚本,多条件之间为 OR 关系。
抖动检测 (Jitter)
抖动检测用于识别频繁触发又恢复的告警场景。当一个告警在短时间内反复触发,说明系统可能处于临界状态,持续发送通知只会增加噪音而无法帮助解决问题。
工作原理
- 系统持续监控每个事件在指定时间窗口内的告警次数
- 当告警次数超过设定的阈值时,事件进入抖动状态
- 在抖动状态期间,该事件的新告警将被抑制通知,不再打扰值班人员
- 抑制时长结束后,事件恢复正常状态,新告警将再次触发通知
参数配置
| 参数 | 说明 | 取值范围 |
|---|---|---|
| 时间窗口 | 检测告警频率的时间范围 | 分钟 |
| 阈值 | 窗口内告警次数达到此值即触发抖动 | 次 |
| 抑制时长 | 进入抖动状态后抑制通知的持续时间 | 分钟 |
例如,设置时间窗口为 10 分钟、阈值为 5 次、抑制时长为 30 分钟,表示:如果某事件在 10 分钟内触发 5 次告警,则在接下来 30 分钟内抑制该事件的通知。
自动关闭 (Auto-Close)
自动关闭功能可以在事件超时或满足特定条件时自动将事件关闭,减少人工干预,保持事件列表清洁。
超时关闭
设置事件的最大存活时间,超过指定时长的事件将被自动关闭。超时时长可设置为 0 - 168 小时(即最长 7 天)。设置为 0 表示不启用超时关闭。
条件关闭
通过条件配置自动关闭事件,支持两种方式:
- 普通条件 - 使用字段 + 操作符 + 值的方式定义,与排除规则的条件配置方式一致
- Aviator 脚本 - 编写自定义表达式实现复杂的关闭逻辑
## 示例:当告警级别降为 info 且状态为 resolved 时自动关闭
severity == "info" && status == "resolved"
执行机制
系统每 5 分钟执行一次自动关闭检查,扫描所有未关闭的事件,对满足条件的事件执行自动关闭操作。
自动关闭的事件会记录操作来源为"系统自动关闭",你可以在事件详情的时间线中查看完整的关闭记录。
降噪记录
所有被降噪引擎处理的告警都会保留完整的记录,确保告警数据不丢失、可追溯。你可以在集成详情页面中查看以下信息:
- 被排除的告警及其匹配的排除规则
- 被静默的告警及其匹配的静默策略
- 被抖动检测抑制的告警
- 被自动关闭的事件及其关闭原因
- 告警的聚合详情,包括聚合 Key 和被合并的告警列表
定期查看降噪记录有助于优化降噪规则。如果发现重要告警被误排除或误静默,可以及时调整规则配置。