# 事件 Pipeline

在通知之前按顺序对事件做变换、补充、丢弃或路由的处理器链。

最后校对于 2026-10-10

这页办完你会得到：一条挂在告警规则或通知规则上的处理器链，事件在发出去之前 先从它上面淌过一遍——改标签、补上下文、或者干脆丢掉。

界面上这个功能叫 **工作流**，入口是 **告警通知 → 工作流**（`/event-pipelines`）。

![工作流列表](https://n9e.github.io/zh/img/docs/events/pipelines.zh.webp)![工作流列表](https://n9e.github.io/zh/img/docs/events/pipelines.zh.dark.webp)

## 1. 新建一条工作流[​](#1-新建一条工作流 "1. 新建一条工作流的直接链接")

点 **新增**，右侧抽屉里配置，三段：**作用范围**、**处理器**、**基本信息**。

保存之后界面会直接告诉你一句要紧的话：**工作流建好后不会自动生效，需要在告警规则或 通知规则里引用它才会执行。** 抽屉里那个「去挂载」的接力面板就是干这个的。

## 2. 作用范围：哪些事件进这条工作流[​](#2-作用范围哪些事件进这条工作流 "2. 作用范围：哪些事件进这条工作流的直接链接")

条件之间是「与」，**全部留空表示所有告警事件都进**。

* **适用标签**：按事件标签筛。填 `service=mon`，就只有带这个标签的事件会进来；
* **适用属性**：按事件的属性筛，可选的属性是固定的四个——**业务组**、**数据源**、 **是否恢复**、**告警级别**。

「是否恢复」很有用：想让恢复通知不走某个处理器，在这里排掉比在处理器里判条件干净。

## 3. 处理器：开源版有这五种[​](#3-处理器开源版有这五种 "3. 处理器：开源版有这五种的直接链接")

处理器**从上往下依次执行**，事件是一条线走完的，没有分支。拖动卡片可以调顺序。

| 分类 | 处理器       | 干什么                                           |
| ---- | ------------ | ------------------------------------------------ |
| 降噪 | 事件丢弃     | 按条件丢弃事件，后续处理器不再执行，也不产生通知 |
| 富化 | AI 摘要      | 用大模型给事件生成一段摘要                       |
| 外呼 | Webhook 回调 | 把事件回调给外部系统（工单、自动化）             |
| 改写 | 事件标签改写 | 修改 / 新增 / 删除事件标签                       |
| 改写 | 事件更新     | 调用一个 HTTP 接口，并用返回内容更新事件         |

**事件丢弃** 用 Go 模板写条件，模板结果是 `true` 就丢，其他任何输出都放行。 可用变量：`$event.Severity`（数字 1/2/3）、`$event.IsRecovered`（布尔）、 `$event.RuleName`、`$event.TagsMap.<标签名>`。编辑器里有几个一键示例：

```
{{ if eq $event.Severity 3 }}true{{ end }}

{{ if $event.IsRecovered }}true{{ end }}

{{ if eq $event.TagsMap.env "dev" }}true{{ end }}
```

标签改写和事件更新怎么配，见[改写标签与补充上下文](https://n9e.github.io/zh/docs/events/relabel-enrich.md)。 AI 摘要怎么接模型、写提示词、结果落在哪，见[AI 摘要处理器](https://n9e.github.io/zh/docs/events/ai-summary.md)。

新建时那张处理器卡片**不预选类型**，必须自己从下拉里挑一个——类型是必填的，不选就存不下去， 提示是「请选择处理器类型，类型为空的处理器对每条事件都会执行失败」。这条校验存在的理由 也正是这句话。

**变量** 区可以定义工作流级别的输入变量，处理器里用 `{{$inputs.变量名}}` 引用， 适合把「同一条流程、不同环境换个地址」这种差异拎出来。

## 4. 挂到规则上，它才会跑[​](#4-挂到规则上它才会跑 "4. 挂到规则上，它才会跑的直接链接")

两个挂载点，语义不同：

* **告警规则上挂**：事件一产生就跑，影响**所有下游**——屏蔽、落库、订阅、每一条通知规则 看到的都是处理过的事件。要丢弃事件、要改所有人都能看到的标签，挂这里。
* **通知规则上挂**：只在这条通知规则准备发送前跑，**只影响这一次发送**。 想给某个群的消息单独加点上下文，挂这里。

在通知规则的表单里，这一段叫 **事件处理工作流**，点「添加事件处理工作流」选中即可， 每条都能单独启用/停用。

**Pipeline 在屏蔽之前跑**，所以挂在告警规则上的工作流改出来的标签，屏蔽规则能匹配到。 完整顺序见[降噪与路由模型](https://n9e.github.io/zh/docs/concepts/noise-routing.md)。

## 几个容易踩的点[​](#几个容易踩的点 "几个容易踩的点的直接链接")

* **工作流是全局的，权限靠「授权团队」。** 基本信息里填的授权团队决定谁能看和改这条工作流， 它本身不绑业务组。
* **停用工作流不等于解除引用。** 引用它的规则还在，只是这条流程被跳过； 删除工作流会让引用它的规则那一段直接失效。
* **别把第一个处理器设成事件丢弃再去调试。** 事件被丢掉后，后面的处理器不会执行， 执行记录里也看不到它们的输出。
* **顺序有意义。** 先改写标签再按标签丢弃，和反过来，结果完全不同。

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

* 上线前先跑一遍：[用模拟事件试跑](https://n9e.github.io/zh/docs/events/try-workflow.md)
* 跑完去哪看结果：[查看 Pipeline 执行记录](https://n9e.github.io/zh/docs/events/execution-records.md)
* 具体怎么改标签：[改写标签与补充上下文](https://n9e.github.io/zh/docs/events/relabel-enrich.md)
* 试跑通了线上不对：[工作流试跑通过但线上不生效](https://n9e.github.io/zh/docs/troubleshooting/workflow-prod-fails.md)
