当处理拥有相同指纹信息的告警时,告警管理认为这些都是相同告警,会删除重复告警,避免产生过多重复告警。本文介绍基于告警指纹去重的基本原理。

一个告警监控规则会产生多次告警,告警管理模块处理告警时,会为每个告警计算一个指纹信息(Fingerprint),拥有相同指纹的告警被认为是同一条告警。告警的指纹信息计算依赖如下告警属性:
  • 告警所属用户ID
  • 告警所在项目
  • 告警规则ID
  • 告警标签
例如有如下的告警监控规则配置:
# 告警监控规则查询语句
* | select count(*) as cnt

# 告警触发条件
cnt > 0
假设告警检查周期为1分钟,则在满足告警条件的情况下,监控模块每分钟都会向告警管理触发一条告警。由于拥有相同告警指纹信息,告警管理处理这些告警时,只保留一份告警数据并删除多余重复的告警信息。
例如,监控模块触发如下三个告警:
// Alert1
{
  "aliuid": "12345",
  "project": "Project1",
  "alert_id": "alert-123",
  "labels": {
    "host": "host-1"
  },
  "annotations": {
    "title": "CPU使用率过高",
    "desc": "CPU当前使用率为90%"
  }
}

// Alert2
{
  "aliuid": "12345",
  "project": "Project1",
  "alert_id": "alert-123",
  "labels": {
    "host": "host-1"
  },
  "annotations": {
    "title": "CPU使用率过高",
    "desc": "CPU当前使用率为95%"
  }
}

// Alert3
{
  "aliuid": "12345",
  "project": "Project1",
  "alert_id": "alert-123",
  "labels": {
    "host": "host-2"
  },
  "annotations": {
    "title": "CPU使用率过高",
    "desc": "CPU当前使用率为90%"
  }
}
那么Alert1和Alert2触发后被认为是同一条告警。Alert1和Alert3就不是同一条告警,因为它们的指纹信息不相同(labels不相同)。