监控器自动暂停
2026-04-02
监控器由于属于长期后台运行的程序,对于一些配置错误、不合理的监控器如果放任执行,可能会对系统资源产生负面影响。
为了避免此类问题,监控器内部存在自我运行状态检测以及自动暂停的处理逻辑。
「暂停」不是「禁用」
监控器自动暂停机制属于 DataFlux Func 内部机制,与用户在观测云中「禁用」监控器不同。
即使监控器处于暂停状态,在观测云中依然处于「开启」状态,不会同步禁用。
一般行为
触发自动暂停时,监控器会记录暂停状态。除检测所缓存故障对象数量过多会记录警告并继续完成本轮外,其他场景会通过异常终止本轮。从下一轮调度开始,在暂停解除前监控器都不会运行。
暂停有时间限制的,到时自动解除暂停,用户无需任何操作;用户调整监控器配置后保存,也会直接解除暂停。
暂停没有时间限制的,需要用户调整监控器配置并保存后解除。
以检测所缓存故障对象数量过多为例,触发暂停后的日志输出如下:
| Text Only | |
|---|---|
1 2 | |
涉及场景
| 场景 | 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元数据中,至少一个字段名与高基数字段黑名单完全匹配。当前脚本默认包括message、trace_id、span_id和uuid;部署环境可以覆盖该列表,因此以实际环境为准。 - 代码检查的是查询响应,而不是只判断 DQL 文本中是否出现
BY;未命中黑名单不会触发暂停。
触发后的行为:
- 系统记录异常监控器及命中的 BY 字段,并将定时任务设置为无限期暂停。
- 当前轮次在该次查询处抛出
DQLByFieldInBlackList并终止后续处理,任务状态为"warning"。 - 启用自观测数据上传时,本轮任务记录会包含
is_paused:"true"、pause_reason和origin_exception_type:"DQLByFieldInBlackList"。 - 下一轮调度开始跳过该监控器,直至用户调整并保存监控器配置。
检测所缓存故障对象数量过多
触发条件:
- 本轮生成的监控器事件会更新故障信息缓存。在事件写入前,代码按照当前监控器 ID,分别检查普通检测的
check、nodata缓存,以及分级检测的warning、error、critical、fatal缓存;外部事件缓存不参与此项检查。 - 每类缓存按照对象维度组合独立计数,不会把各类数量相加。任意一类的对象数量严格大于配置上限时才会触发暂停;等于上限时不会触发。
- 当前脚本默认上限为 100000。超过预警线但尚未超过上限时,只会发送接近上限的系统通知,不会暂停;同一监控器当天不会重复发送该通知。当前默认预警线为上限的 80%。部署环境可以覆盖上限和预警比例,因此以实际环境为准。
触发后的行为:
- 系统记录故障对象过多的异常监控器,并将定时任务设置为无限期暂停。
- 代码抛出
TooManyFaultInfoCache后,会在事件写入层将其捕获并记录为警告,然后继续写入本轮事件。因此,本轮不会仅因该警告而失败,暂停从下一轮调度开始生效。 - 启用自观测数据上传且没有其他异常时,本轮任务记录中的
task_status仍为"success",status为"warning";记录还会包含is_paused:"true"、pause_reason和warning_info,但不包含origin_exception_type。 - 下一轮调度开始跳过该监控器,直至用户调整并保存监控器配置。
备注
启用自观测数据上传时,触发暂停的本轮任务记录会增加 is_paused:"true" 和 pause_reason:"xxxxx";有时限的暂停还会增加 pause_expires,表示暂停秒数。其中,检测所缓存故障对象数量过多时,警告会记录到 warning_info,不会设置 origin_exception_type。可以使用如下 DQL 语句查询相关的任务记录:
| 相关任务日志查询 DQL | |
|---|---|
1 | |