恢复条件使用场景

夜莺 v9 告警恢复条件详解:三种恢复判定方式、用自定义恢复条件防止告警抖动、留观时长,以及无数据时是否恢复的取舍。

概述

告警规则除了「什么情况下触发」,还需要定义「什么情况下恢复」。默认情况下,触发条件不再满足时告警就自动恢复——这对大多数场景够用,但有两类问题:

  • 阈值附近抖动:指标在阈值上下反复跳动,导致告警「触发 → 恢复 → 又触发」反复横跳,通知刷屏。
  • 无数据该不该恢复:采集中断、查询查不到数据时,到底应该把告警当成「已恢复」还是「继续告警」?不同数据源、不同业务的答案不一样。

「恢复条件」就是用来精细控制恢复时机的。配置入口:告警规则编辑页 → 触发条件区域 → 高级设置 → 恢复条件。它对简单模式表达式模式都生效,且每个触发条件($A$B…对应的每个阈值判断)可以单独配置。

三种恢复方式

恢复条件是一个下拉选项,共三种:

恢复方式 含义 查不到数据时
查不到数据就恢复 触发条件不再满足查询查不到数据 → 恢复 恢复
必须查到数据且不满足告警条件才恢复 必须查到数据、且数据不满足触发条件 → 才恢复 不恢复(继续告警)
结果满足自定义条件才算恢复 必须查到数据、且数据满足你写的恢复表达式 → 才恢复 不恢复(继续告警)

三者最关键的区别在于**「查不到数据时怎么办」**:

  • 查不到数据就恢复:把「没数据」也当作恢复信号。适合日志类告警——查不到错误日志,通常就说明问题没了。
  • 后两种:「没数据」不算恢复,告警会持续,直到真正查到一条「正常」的数据。适合指标类告警——采集中断时你往往不希望告警被误判为恢复而悄悄消失。

默认值:新建规则时,日志类数据源默认「查不到数据就恢复」,其它数据源(Prometheus 等指标源)默认「必须查到数据且不满足告警条件才恢复」。通常保持默认即可。

自定义恢复条件:防止告警抖动(最常用的进阶场景)

选择「结果满足自定义条件才算恢复」后,会多出一个恢复表达式输入框(占位提示 e.g. $A < 50)。它的语法和触发表达式完全一致(参见 告警表达式语法),只是用来判定「恢复」而非「触发」。

这正是解决阈值抖动的标准手段——让触发阈值和恢复阈值拉开一段距离。

例子:CPU 使用率防抖动

配置 表达式
触发条件 $A > 90
恢复条件 $A < 80

效果:

  • CPU 超过 90% → 触发告警;
  • 之后只要还在 80%~90% 之间,既不再触发、也不恢复,告警保持;
  • 直到跌破 80% 才真正恢复。

这样就避免了 CPU 在 90% 附近小幅波动时告警反复横跳。

更多自定义恢复的例子:

场景 触发条件 恢复条件
错误率防抖 $A.error_rate > 0.05 $A.error_rate < 0.01
队列积压防抖 $A.pending > 10000 $A.pending < 1000
多条件恢复(更严格) $A.qps > 1000 $A.qps < 500 && $B.error_rate < 0.01

恢复表达式可以引用和触发条件相同的多个查询变量,组合出比「触发条件取反」更严格或更宽松的恢复逻辑。

留观时长:恢复前再观察一段时间

「恢复条件」决定满足什么才算恢复,而留观时长决定恢复后还要再稳定多久才真正发恢复通知。两者互补,可同时使用。

  • 配置入口:告警规则编辑页 → 通知配置 → 留观时长(秒),默认 0
  • 含义:满足恢复条件后,还要持续 N 秒没有再次触发阈值,才判定为恢复并发送恢复通知。
  • 作用:进一步抑制「刚恢复又触发」的短时抖动。

举例:留观时长 = 300,则告警满足恢复条件后,必须连续 5 分钟都不再触发,才会真正恢复。

留观时长和恢复条件是两道独立的闸:先满足恢复条件,再熬过留观时长,才最终恢复。

怎么选

你的诉求 推荐配置
普通指标告警,低于阈值就该恢复 必须查到数据且不满足告警条件才恢复(默认)
日志告警,查不到日志就算恢复 查不到数据就恢复(日志源默认)
指标在阈值附近反复抖动、通知刷屏 结果满足自定义条件才算恢复,恢复阈值比触发阈值更宽松
采集可能中断,但中断时不想让告警自动消失 避开「查不到数据就恢复」
采集中断本身就意味着问题已解决 查不到数据就恢复
恢复后想再观察一段时间防抖 任意方式 + 设置「留观时长」

常见问题

Q1:恢复条件和触发条件取反有什么不同?

A:默认行为就近似「触发条件不满足即恢复」。自定义恢复条件的价值在于让恢复阈值和触发阈值不对称,或加入额外变量,这是简单取反做不到的。比如触发 $A > 90、恢复 $A < 80,中间 80~90 的「灰区」既不触发也不恢复。

Q2:选了「必须查到数据……」,采集中断后告警为什么一直不恢复?

A:这是预期行为。这两种方式下「查不到数据」不算恢复,告警会持续到查到一条满足恢复条件的数据为止。如果你希望采集中断时自动恢复,请改选「查不到数据就恢复」;如果希望对「无数据」单独告警,请配置规则的「无数据告警」选项。

Q3:恢复表达式写错了会怎样?

A:表达式无法正确求值时会被视为「恢复条件不满足」,即不会恢复(界面无明显报错)。配置后建议结合数据预览确认恢复阈值合理。恢复表达式的语法细节见 告警表达式语法

Q4:恢复表达式里能用字符串、时间等类型吗?

A:可以,规则和触发表达式完全一致——值字段是数值、标签字段是字符串、支持 date()/now() 等。详见 告警表达式语法

参考资料

更新时间 2026-05-29

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云