# 事件聚合与去重

同一规则 + 同一标签集只对应一个事件，重复判定不会再建一条；聚合视图按表达式把上百条活跃事件折成几张卡片。

最后校对于 2026-10-10

这页办完你会知道：为什么同一个故障不会每个判定周期发一条，以及一屏几百条活跃事件时 怎么把它们折成几张卡片看。

## 去重是天然的：一个事件 = 规则 + 标签集[​](#去重是天然的一个事件--规则--标签集 "去重是天然的：一个事件 = 规则 + 标签集的直接链接")

事件的身份由**规则和标签集**共同决定，算出来就是详情里那个 Hash。

* 同一条规则、同一组标签，**只会有一个活跃事件**。规则每个周期都在跑，条件一直成立， 更新的是这条事件的触发时间和触发时值，**不会每个周期新建一条**；
* 同一条规则跑在 5 台机器上，是 5 个事件（`ident` 不同），各自触发、各自恢复；
* 恢复之后再次触发，才算新的一条。

所以「重复告警」在夜莺里通常不是同一个事件发了很多次，而是**标签维度太细**—— 一条规则按 `device` 展开出十几个序列，就有十几个独立事件。想少几条， 先看能不能在规则里把维度聚合掉（PromQL 里 `sum by (...)`）， 见[指标规则](https://n9e.github.io/zh/docs/alerting/metric-rules.md)。

同一条事件反复通知，则由告警规则上的两个字段控制：**重复通知间隔（分钟）** —— 持续未恢复时隔多久再提醒一次；**最大发送次数** —— 0 表示不限制。 这两个是最直接的「一个故障别发一百条」开关。

## 把上百条活跃事件折成几张卡片[​](#把上百条活跃事件折成几张卡片 "把上百条活跃事件折成几张卡片的直接链接")

**告警通知 → 告警事件 → 活跃告警**，列表上方有一个 **聚合规则** 下拉。 选中一条聚合规则后，事件按规则算出的字符串归类，表格上方出现一排卡片， 每张卡片是一类；点某张卡片，下方表格只显示这一类的事件。

选择框旁边会显示「N 个聚合结果」，一眼看出这一屏其实只有几类问题。

## 常用的聚合表达式[​](#常用的聚合表达式 "常用的聚合表达式的直接链接")

点下拉里的 **新增规则**，填两个字段：**规则名称**（下拉里显示的名字）和 **聚合规则**（Go 模板，算出来的字符串就是卡片标题）。管理员还能把它设为公开， 给所有人用；不公开就只有自己看得到。

| 想按什么归类    | 聚合规则填                                    |
| --------------- | --------------------------------------------- |
| 按告警规则      | `{{.RuleName}}`                               |
| 按业务组 + 级别 | `Group:{{.GroupName}} Severity:{{.Severity}}` |
| 按机器          | `{{.TagsMap.ident}}`                          |
| 按实例标签      | `{{.TagsMap.instance}}`                       |
| 按服务          | `{{.TagsMap.service}}`                        |

能用的字段：`.RuleName`、`.GroupName`、`.Severity`、`.TagsMap.<标签名>` 等事件字段。

值班时最有用的是 `{{.RuleName}}` 和 `{{.TagsMap.ident}}`：前者回答「哪条规则在刷屏」， 后者回答「是不是就那一台机器出问题」。

聚合规则只影响**这一页怎么显示**，不改事件本身，也不影响通知。

## 想减少通知条数，用这三招[​](#想减少通知条数用这三招 "想减少通知条数，用这三招的直接链接")

看完聚合卡片、确认某一类确实不用每条都发之后：

1. **规则上调重复通知间隔和最大发送次数**——针对「同一个事件一直响」；
2. **屏蔽规则**——针对「这段时间这类别吵」，见[屏蔽规则](https://n9e.github.io/zh/docs/events/mute-rules.md)；
3. **工作流的事件丢弃处理器**——针对「这类根本不该发」，见[事件 Pipeline](https://n9e.github.io/zh/docs/events/pipelines.md)。

三者的先后顺序见[降噪与路由模型](https://n9e.github.io/zh/docs/concepts/noise-routing.md)； 成套的场景化配法见[降噪模式](https://n9e.github.io/zh/docs/events/noise-patterns.md)。

## 下一步[​](#下一步 "下一步的直接链接")

* 两张事件列表怎么用：[活跃事件与历史事件](https://n9e.github.io/zh/docs/events/active-historical.md)
* 按条件分流而不是一刀切：[条件路由](https://n9e.github.io/zh/docs/events/routing.md)
* 一会儿报一会儿恢复：[告警反复触发和恢复](https://n9e.github.io/zh/docs/troubleshooting/alert-flapping.md)
