跳到主要内容

查看判定执行记录

每次判定都有记录:看查询返回了什么、事件为什么触发或没触发。

这页办完你会得到:对任意一条规则,都能翻出最近一小时的每个评估周期,逐条看到查询返回了什么、 哪些序列越了阈值、事件后来去了哪儿。「查询明明有数据,规则就是不触发」,答案就在这里。

打开执行记录​

告警通知 → 规则管理,鼠标移到规则那一行,点操作列里的执行记录。

规则列表规则列表

抽屉打开时默认展示最近 1 小时。上方的时间选择器可以改范围,列表底部的加载更早的记录 往前翻页。

列表是空的本身也是信息——本页最后一节列了三种原因。

一行就是一个评估周期​

列说明
评估时间这一轮判定跑在什么时候
数据源只有规则匹配到多个数据源时才出现。每个数据源单独评估,各自出一行
查询结果每条查询一个标签:A: 12 条曲线,或橙色的 A: 无数据,或红色的 A: 查询错误(悬停看报错原文)
异常点本轮有多少条序列满足了触发条件。旁边绿色的 ↓n 是恢复掉的序列数
事件处理这些异常点最终去了哪儿:触发 / 等待持续时长 / 屏蔽 / 流水线丢弃 / 抑制
耗时这一轮花了多少毫秒。规则跑不动时就看这个数

从左往右读,正好是按顺序回答:查询通不通、有没有东西越阈值、最后有没有真的出事件。

展开一行看现场​

点开一行,下面有三段:

  • 查询现场——真正发出去的那条查询(变量已经替换好,规则里用了变量时会带 「变量展开查询」标记),以及返回的曲线,含标签、值和数据时间。
  • 判定结果——被判为异常的那些序列,每条带自己的标签和参与比较的值。恢复掉的会标出来。
  • 事件处理明细——每条事件一行:事件 hash、标签、走到了哪个阶段,以及一句裁决说明。

事件 hash 只有在事件真的落了库的那几个阶段才是可点的链接——已触发、重复静默、通知屏蔽、已恢复。 其余阶段的事件压根没落库,点了也查不到。

曲线和数据点在落盘前会先截断,所以结果很宽的时候记录里只有一部分,界面上会明确提示已截断。

事件能走到的阶段​

「事件处理明细」里的阶段,就是引擎把这条事件往下带到哪一步为止:

阶段含义
等待持续时长条件成立了,但还没满足持续时长。说明栏写的是 for=300s elapsed=120s
已触发产生并入队——首次触发或一次重复通知
重复静默已经在告警中,重复通知间隔还没到,本轮不发
被抑制同一条规则里更高的级别命中了同一条序列,且开了级别抑制
流水线丢弃规则上挂的事件处理流水线把它丢了
已屏蔽命中屏蔽规则,事件压根没产生
仅屏蔽通知命中的是「只屏蔽通知」的屏蔽规则,事件照常落库
通知屏蔽屏蔽通知期内的一次落库快照
被 hook 屏蔽命中了外部屏蔽策略
已恢复恢复事件产生并入队
入队失败事件队列满了——是引擎积压,不是规则的问题

顺序很重要,而且不是大多数人以为的那个顺序:流水线跑在屏蔽规则之前。 被流水线丢掉的事件,压根走不到屏蔽检查。

它能直接回答的三个问题​

「即时查询里有数据,规则就是不触发。」 看「查询结果」。标签写着 无数据, 说明规则跑的那条查询和你粘进查询页的那条不是一回事——多半是打在了另一个数据源上, 或者变量展开成了你没预料到的样子。展开这一行就能看到真正发出去的查询。

「触发了,但没人收到。」 看「事件处理」列。屏蔽 和 流水线丢弃 说明事件根本没走到通知; 显示 触发 说明它走到了,问题在下游的通知规则,见 没有收到通知。

「反复触发又反复恢复。」 对比相邻几行的「异常点」数量。每个周期在 1 和 0 之间来回跳, 就是指标压在阈值上,见告警反复触发或从不恢复。

记录存在哪、留多久​

记录写在跑这次判定的那个告警引擎的本地磁盘上,不落数据库。默认值都在引擎配置的 [Alert.EvalLog] 下面:

[Alert.EvalLog]
# Disable = false
# 默认是 <[Log] Dir>/evallog
# Dir = "logs/evallog"
# 192 小时 = 8 天
# RetentionHours = 192
# MaxSeriesPerQuery = 100
# MaxPointsPerSeries = 60
# PerRuleDailyMB = 1024
# MaxDiskGB = 20

也就是:留 8 天,单条记录最多存 100 条曲线、每条曲线 60 个点,单规则每天上限 1 GB, 总量上限 20 GB。撞到上限时保新丢旧。

一条记录都没有​

三种原因,按值得排查的顺序:

  1. 你选的时间范围超出了 RetentionHours;
  2. 这个引擎上配了 Disable = true;
  3. 这条规则由一个还没有这个功能的旧版引擎在评估。

部分引擎节点没应答​

一条规则跨了由不同引擎负责的数据源时(比如边缘机房),抽屉顶部会给一条警告,列出没连上的节点。 那些节点的记录还在,就在它们自己的磁盘上。警告里直接给出了要在那台机器上执行的命令:

curl -u <user>:<pass> 'http://<engine-instance>/v1/n9e/eval-records?rule_id=<id>&datasource_id=<id>&from=<ts>&to=<ts>'

用户名密码是那个节点 HTTP.APIForService 里配的 BasicAuth 账号。

下一步​