告警去重是 Keep 中的一项关键功能,通过将相似告警分组在一起来帮助减少噪音并简化事件管理。此过程确保您的团队不会被关于同一问题的大量通知所淹没,从而实现更高效、更专注的事件响应。
术语表
- 去重规则:用于确定告警是否应分组在一起的条件集。
- 部分去重:将告警实例关联为单个告警,考虑相同告警不同状态的情况(例如 firing 和 resolved)。这是默认模式,其中指定字段用于识别和分组相关告警。
- 指纹字段:用于识别相似告警的特定告警属性。
- 完全去重:一种模式,其中如果所有字段完全匹配(除了明确忽略的字段),则告警被视为相同。这有助于通过丢弃重复告警来避免系统过载。
- 忽略字段:在完全去重模式下,比较告警时不考虑的字段。
去重类型
部分去重
部分去重允许您指定某些字段(指纹字段),用于识别相似告警。具有这些指定字段匹配值的告警被视为重复并分组在一起。此方法灵活,允许对告警如何去重进行精细控制。
与 Keep 集成的每个提供者都带有针对该提供者特定告警格式和常见用例量身定制的预构建部分去重规则。 默认指纹字段使用提供者代码中的FINGERPRINT_FIELDS属性定义(例如 datadog provider 或 gcp monitoring provider)。
完全去重
启用完全去重时,Keep 还将丢弃完全相同的事件(排除忽略字段)。此模式在确定重复时考虑告警的所有字段,但明确忽略的字段除外。
默认情况下,排除 lastReceived 时间的完全相似事件会被完全去重并丢弃。这有助于防止重复相同告警导致的系统过载。
告警和结果的真实示例
示例 1:部分去重
规则 - 基于'service'和'error_message'字段去重。
json
# 告警 1
{
"service": "payment",
"error_message": "Database connection failed",
"severity": "high",
"lastReceived": "2023-05-01T10:00:00Z"
}
# 告警 2
{
"service": "payment",
"error_message": "Database connection failed",
"severity": "critical",
"lastReceived": "2023-05-01T10:05:00Z"
}
# 告警 3
{
"service": "auth",
"error_message": "Invalid token",
"severity": "medium",
"lastReceived": "2023-05-01T10:10:00Z"
}结果:
- 告警 1 和 2 被去重为单个告警,字段已更新。
- 告警 3 保持单独,因为它的服务和错误消息不同。
示例 2:完全去重
规则:完全去重,'timestamp' 作为忽略字段
传入告警:
json
# 告警 1
{
service: "api",
error: "Rate limit exceeded",
user_id: "12345",
lastReceived: "2023-05-02T14:00:00Z"
}
# 告警 2(因相同被丢弃)
{
service: "api",
error: "Rate limit exceeded",
user_id: "12345",
lastReceived: "2023-05-02T14:01:00Z"
}
# 告警 3
{
service: "api",
error: "Rate limit exceeded",
user_id: "67890",
lastReceived: "2023-05-02T14:02:00Z"
}结果:
- 告警 1 和 2 因除忽略的 timestamp 字段外相同而被去重。
- 告警 3 因 user_id 不同而保持单独。
工作原理
Keep 的去重过程遵循以下步骤:
告警摄取:Keep 收到的每个告警首先被摄取到系统中。
富集:摄取后,每个告警都会经过富集过程。此步骤为告警添加额外的上下文或信息,增强其价值和实用性。
去重:富集后,Keep 的告警去重器开始发挥作用。它将定义的去重规则应用于富化后的告警。