跳转至

监控器自动暂停

2026-04-02

监控器由于属于长期后台运行的程序,对于一些配置错误、不合理的监控器如果放任执行,可能会对系统资源产生负面影响。

为了避免此类问题,监控器内部存在自我运行状态检测以及自动暂停的处理逻辑。

「暂停」不是「禁用」

监控器自动暂停机制属于 DataFlux Func 内部机制,与用户在观测云中「禁用」监控器不同。

即使监控器处于暂停状态,在观测云中依然处于「开启」状态,不会同步禁用。

一般行为

触发自动暂停时,监控器会记录暂停状态。除检测所缓存故障对象数量过多会记录警告并继续完成本轮外,其他场景会通过异常终止本轮。从下一轮调度开始,在暂停解除前监控器都不会运行

暂停有时间限制的,到时自动解除暂停,用户无需任何操作;用户调整监控器配置后保存,也会直接解除暂停。

暂停没有时间限制的,需要用户调整监控器配置并保存后解除。

以检测所缓存故障对象数量过多为例,触发暂停后的日志输出如下:

Text Only
1
2
[Warning]
检测所缓存的 check 数据(428372)已超过 100000,本定时任务*下一轮*开始暂停(问题产生原因:监控器查询配置错误或检测数据规模超限)

涉及场景

场景 origin_exception_type 字段值 暂停时长 解除暂停条件 说明
工作空间已锁定 "WorkspaceLocked" 1 小时 到期自动解除,或保存监控器配置 工作空间状态异常并被锁定
工作空间任务调度次数超过限制 "WorkspaceJobOutofQuota" 1 小时 到期自动解除,或保存监控器配置 工作空间任务调度配额不足
找不到工作空间 "WorkspaceNotFound" 无限期 保存监控器配置 工作空间 UUID 错误或空间已被删除
未指定检测目标 "EmptyTargets" 无限期 保存监控器配置 常见于配置错误
未指定 DQL "EmptyDQL" 无限期 保存监控器配置 常见于配置错误
检测 DQL 的 BY 字段命中高基数字段黑名单 "DQLByFieldInBlackList" 无限期 保存监控器配置 by trace_id 等字段命中黑名单时触发
检测所缓存故障对象数量过多 - 无限期 保存监控器配置 记录到 warning_info,常见于查询配置或数据规模异常

检测 DQL 的 BY 字段命中高基数字段黑名单

触发条件:

  • 监控器在本轮执行期间发起 DQL 查询,且没有被系统豁免 BY 字段检查。
  • 查询响应的 group_by 元数据中,至少一个字段名与高基数字段黑名单完全匹配。当前脚本默认包括 messagetrace_idspan_iduuid;部署环境可以覆盖该列表,因此以实际环境为准。
  • 代码检查的是查询响应,而不是只判断 DQL 文本中是否出现 BY;未命中黑名单不会触发暂停。

触发后的行为:

  • 系统记录异常监控器及命中的 BY 字段,并将定时任务设置为无限期暂停。
  • 当前轮次在该次查询处抛出 DQLByFieldInBlackList 并终止后续处理,任务状态为 "warning"
  • 启用自观测数据上传时,本轮任务记录会包含 is_paused:"true"pause_reasonorigin_exception_type:"DQLByFieldInBlackList"
  • 下一轮调度开始跳过该监控器,直至用户调整并保存监控器配置。

检测所缓存故障对象数量过多

触发条件:

  • 本轮生成的监控器事件会更新故障信息缓存。在事件写入前,代码按照当前监控器 ID,分别检查普通检测的 checknodata 缓存,以及分级检测的 warningerrorcriticalfatal 缓存;外部事件缓存不参与此项检查。
  • 每类缓存按照对象维度组合独立计数,不会把各类数量相加。任意一类的对象数量严格大于配置上限时才会触发暂停;等于上限时不会触发。
  • 当前脚本默认上限为 100000。超过预警线但尚未超过上限时,只会发送接近上限的系统通知,不会暂停;同一监控器当天不会重复发送该通知。当前默认预警线为上限的 80%。部署环境可以覆盖上限和预警比例,因此以实际环境为准。

触发后的行为:

  • 系统记录故障对象过多的异常监控器,并将定时任务设置为无限期暂停。
  • 代码抛出 TooManyFaultInfoCache 后,会在事件写入层将其捕获并记录为警告,然后继续写入本轮事件。因此,本轮不会仅因该警告而失败,暂停从下一轮调度开始生效。
  • 启用自观测数据上传且没有其他异常时,本轮任务记录中的 task_status 仍为 "success"status"warning";记录还会包含 is_paused:"true"pause_reasonwarning_info,但不包含 origin_exception_type
  • 下一轮调度开始跳过该监控器,直至用户调整并保存监控器配置。

备注

启用自观测数据上传时,触发暂停的本轮任务记录会增加 is_paused:"true"pause_reason:"xxxxx";有时限的暂停还会增加 pause_expires,表示暂停秒数。其中,检测所缓存故障对象数量过多时,警告会记录到 warning_info,不会设置 origin_exception_type。可以使用如下 DQL 语句查询相关的任务记录:

相关任务日志查询 DQL
1
source:DFF_task_record_func service:DFF_task_record_func is_paused:true