跳到主要内容

端到端测试一条通知

在凌晨三点依赖它之前,先通过真实媒介从规则到手机完整发一条测试消息。

这页办完你会确认:真实告警发生时,消息确实会落到那个群 / 那个邮箱, 而不是停在「界面上配好了」这一步。

三个层次的测试​

层次在哪按验证了什么没验证什么
媒介测试通知媒介编辑页底部的 测试地址通不通、密钥对不对、网络能不能出去你的消息模板、通知规则的筛选条件
通知规则测试通知规则表单里每条通知配置右上角的 通知测试媒介 + 模板 + 接收人这一整组配置告警规则有没有挂上这条通知规则
真实告警告警规则的 测试触发整条链路,包括规则绑定——

三个都过了才算数。只做前两个是「配置对」,不等于「真实告警会到」。

1. 在媒介上直接测​

告警通知 → 通知媒介,点开一个媒介,底部有 测试。

它按当前表单里的内容真实发一条消息,不需要先保存,所以适合边填边试。 弹窗里从上往下:

  • 模式:模拟事件(内置假事件,可选级别和是否恢复)/ 历史事件(挑真实事件);
  • 媒介参数:这个媒介声明的自定义参数,比如钉钉的 Access Token;
  • 接收人:媒介配了「联系方式」时才出现。

预期结果:提示「发送成功」,并且你真的在群里/邮箱里看到那条消息。 只看提示不算——媒介返回 200 但消息被平台丢掉的情况并不少见。

两个限制:

  • Script 类媒介不能内联测试,必须先保存。未保存的脚本会被写盘执行,等于从请求体 直接执行任意代码,后端因此拒绝。
  • 这里发出去的正文不是你的模板,是界面按媒介请求体里的 {{$tpl.xxx}} 现拼的一段 起步内容。所以这一步只能证明「通道是通的」,证明不了「模板写对了」。

2. 在通知规则里测​

告警通知 → 通知规则,编辑一条规则,在某条通知配置右上角点 通知测试。 这一步用的就是这条配置真正会用的媒介、模板和接收人。

两种模式的差别很重要:

  • 使用模拟事件:不校验筛选条件,只验证通道。级别取你勾选的最低那一级。 模拟事件长这样——规则名「通知测试模拟事件」,触发值 81.5,标签 ident=mock-host-01、source=notify-rule-test。
  • 选择历史事件:会先跑一遍筛选条件,事件不匹配就直接报错 (event severity not match severity filter 之类)。想验证筛选条件写得对不对,用这个。

预期结果:弹窗里回显目标返回的响应(HTTP 媒介是 status_code:200, response:...), 同时消息真的到了。

3. 用真实告警走完整条链路​

前两步不经过告警规则,所以最容易漏掉的一件事是:这条通知规则根本没挂到告警规则上。

去 告警通知 → 规则管理,确认目标告警规则的 通知规则 字段里有它, 然后用规则自己的测试触发真的产生一条事件。

预期结果:告警通知 → 告警事件 里出现一条新事件,同时你收到消息。

在通知记录里确认​

事件出现了但消息没到,就去看通知记录:告警事件 → 点开事件详情 → 通知记录 → 查看详情。

抽屉里有两张表:告警规则通知 和 订阅规则通知,列是通知规则 ID、通知渠道、 通知对象、通知目标、通知状态。状态里的文字就是失败原因,例如:

记录里的文字含义
status_code:200, response:...发出去了,对方回了 200
message_template not found这条通知配置没选消息模板,整条被丢弃
notify_channel not found媒介被删了或被停用
all retries failed, last error: ...连不上目标地址
status_code:400, response:...目标接受了请求但拒绝了内容,多半是 token、签名或消息格式

通知目标默认打码(末 8 位变星号),只有邮件、短信、语音、脚本和屏蔽记录例外。

测不通的时候按这个顺序查​

  1. 媒介测试过不去 → 是网络或密钥问题,跟夜莺的其余配置无关。看错误里的 status code。
  2. 媒介能过、通知规则测不过 → 看筛选条件(尤其是适用级别一个都没勾)和模板是否选了。
  3. 都能过、真实告警收不到 → 告警规则上没挂这条通知规则,或者被屏蔽规则吃掉了。
  4. 通知记录里根本没有这条事件的记录 → 事件压根没进到通知这一步, 顺着有事件但收不到通知排。

下一步​