条件路由
根据标签和级别把事件送到不同的媒介或团队。
这页办完你会知道:想让「S1 打电话、S3 只进群」「env=prod 的走值班群、env=dev 的不发」
这类需求落地,该动哪一处配置。
路由发生在通知规则里
夜莺没有单独的「路由表」。事件产生之后,会逐条走它命中的通知规则, 每条通知规则内部又可以有多条 通知配置——真正的分流就在这一层。
一条通知配置 = 一个媒介 + 一个消息模板 + 一组接收人 + 一组筛选条件。 筛选条件不满足就跳过这条配置,其余配置照常。
1. 在一条通知规则里按条件分流
告警通知 → 通知规则,编辑一条规则,在 通知配置 里点「添加通知配置」, 每加一条就是一个分流出口。每条上的四组条件都留空表示不限制,之间是「与」:
| 条件 | 能做的分流 |
|---|---|
| 适用级别 | S1 走电话、S2 走短信、S3 走群消息 |
| 适用时段 | 按周几 + 时段。白天进群、夜里打电话 |
| 适用标签 | 按事件标签,六种操作符和屏蔽规则一样 |
| 适用属性 | 按固定的几个属性:业务组、数据源、是恢复事件?、告警规则、级别、机器业务组 |
「S1 打电话、S3 只进群」的最小配置:同一条通知规则里放两条通知配置, 第一条媒介选电话、适用级别只勾 S1;第二条媒介选群机器人、适用级别只勾 S3。
三个级别一个都不勾等于把这条配置停用——它什么事件都匹配不到。
「是恢复事件?」这个属性值得单独说:想让恢复通知只发群、不打电话, 在电话那条配置的适用属性里把它排掉,比在模板里判断干净。
2. 用多条通知规则分流
一条告警规则可以挂多条通知规则。当两拨接收人关心的事件集合本来就不一样时, 拆成两条通知规则比在一条里堆通知配置更好维护——各自的授权团队不同,改起来互不影响。
判断标准很简单:同一批人、同一个场景,用通知配置;不同团队各管各的,用不同的通知规则。
3. 让别的团队自己订阅
如果分流的动机是「另一个团队也想收到这类告警」,不要去改人家的通知规则, 让他们建一条订阅规则——订阅方自己决定筛什么、用哪条通知规则发, 规则的所有者完全不用参与。
4. 根本不该发的,在工作流里丢掉
前三种是「送到哪里」,这一种是「不送」。在事件 Pipeline 里用 事件丢弃 处理器按条件把事件拦下来:
{{ if eq $event.TagsMap.env "dev" }}true{{ end }}
挂在告警规则上,事件在屏蔽之前就被丢掉,所有下游都看不到它; 挂在通知规则上,只影响这一条通知规则的这次发送。
选哪一种
| 你想要的效果 | 用什么 |
|---|---|
| 同一批人,不同级别用不同媒介 | 一条通知规则里的多条通知配置 |
| 夜里和白天走不同渠道 | 通知配置的适用时段 |
| 不同团队各管一摊 | 多条通知规则 |
| 别人也想收到我的告警 | 订阅规则 |
| 这类事件根本不该发 | 工作流的事件丢弃处理器 |
| 变更窗口内暂时别吵 | 屏蔽规则 |
几个容易踩的点
- 标签得先存在。 按
env分流的前提是事件上有env标签。没有就先在告警规则的 附加标签里补,或者在工作流里改写出来。 - 适用标签匹配的是事件标签,不是规则名。 想按规则分流,用「适用属性」里的「告警规则」。
- 顺序无关。 一条通知规则里的多条通知配置是并列的,命中几条就发几条, 不是「先匹配到哪条就用哪条」。想互斥就把条件写成互斥的。
- 改完先测。 通知配置右边有「通知测试」,可以挑一条历史事件或用模拟事件走一遍, 见验证通知链路。