数据源 → 规则 → 事件
整个产品挂在三个对象上:规则查询数据源,越界的规则产生事件。
夜莺里对象不少,但只要抓住三个,剩下的都是挂在它们身上的修饰。
三个对象
数据源 ──被查询──> 告警规则 ──越界时产生──> 事件
│ │ │
存在哪儿 属于哪个业务组 带着标签和注解
怎么连 查什么、什么算越界 走降噪和路由到人
数据源回答「数据在哪儿、怎么连」。它不存数据,只记连接方式: 地址、认证、超时、类型。注册一次,之后规则和查询页面都按名字引用它。
告警规则回答「查什么、什么算越界」。它绑定一个或多个数据源, 带一条查询(PromQL、SQL、LogQL……取决于数据源类型)和一组判定条件: 多久查一次、条件要持续多久才算数、算哪一级。
事件是规则判定的产物。它带着触发时的值、时间、标签和注解, 从这里开始走降噪和路由,最终变成某个人手机上的一条消息。
其他对象都挂在这三个上
| 对象 | 挂在哪儿 | 作用 |
|---|---|---|
| 业务组 | 规则、对象、仪表盘都属于某个业务组 | 权限边界,见业务组 |
| 屏蔽规则 | 作用在事件上 | 命中就不产生事件,或只是不发通知 |
| 订阅规则 | 作用在事件上 | 让别的团队也收到 |
| 事件 Pipeline | 挂在规则或通知规则上 | 改标签、补上下文、丢弃 |
| 通知规则 | 消费事件 | 按级别和标签决定发给谁、走哪个媒介 |
| 消息模板 | 被通知规则引用 | 决定消息长什么样 |
| 仪表盘 | 查询数据源 | 看图,不参与告警 |
一条数据的完整旅程
- 采集器把指标写进时序库(或者你已有的采集链路本来就在写);
- 你在夜莺里把这个时序库注册成数据源;
- 一条告警规则每 15 秒拿着 PromQL 去查它;
- 某次查询的返回值越界,并且持续了设定的时长 → 产生一个事件;
- 事件带着
ident=n9e-web-01、env=prod这样的标签; - 标签决定它会不会被屏蔽、会不会被某个团队订阅、最后落到哪条通知规则;
- 通知规则挑一个媒介和一个模板,把它发出去。
每一步都能在界面上查到:规则页看判定记录,事件页看事件,通知记录看投递结果。