You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prometheus跨Exporter对比指标时左值为空的规则触发方案问询

解决方案

要解决这个问题,核心是基于右侧数据库指标的标签来补全左侧进程指标的空值,既能保留所需的client、manager、link标签,又能确保仅在右侧指标存在的实例上触发告警(右侧为空则不生成监控数据,自然不会触发)。

步骤1:构造带标签的0值补全系列

利用右侧指标的标签,生成一个值为0、标签完全一致的指标系列,这样补全空值时不会丢失维度信息:

oracledb_ebs_concurrent_queues_target_processes{concurrent_queue_name=~".*OPP.*"} * 0

步骤2:合并左侧指标与补全系列

将左侧进程指标和上面的0值系列合并,当左侧无数据时自动用0填充,同时通过标签限定仅在匹配维度上补全:

namedprocess_namegroup_num_procs{groupname=~".*OPP.*"}
or on(client, manager, link)
(oracledb_ebs_concurrent_queues_target_processes{concurrent_queue_name=~".*OPP.*"} * 0)

步骤3:告警规则表达式

如果需求是左侧进程数为0(或无数据)且右侧指标存在时触发告警,最终的告警规则表达式可以写为:

(
  namedprocess_namegroup_num_procs{groupname=~".*OPP.*"}
  or on(client, manager, link)
  (oracledb_ebs_concurrent_queues_target_processes{concurrent_queue_name=~".*OPP.*"} * 0)
) == 0

这个表达式的逻辑:

  • 仅当右侧指标存在时,才会生成对应的0值补全系列;
  • 左侧进程数为0(或无返回值)时,合并结果为0,触发告警;
  • 右侧指标不存在的实例,整个表达式无返回值,不会触发告警(符合“该实例不适用此规则”的要求)。

扩展:对比进程数与目标值

如果需要判断左侧进程数小于右侧目标进程数时告警,可用以下查询:

(
  namedprocess_namegroup_num_procs{groupname=~".*OPP.*"}
  or on(client, manager, link)
  (oracledb_ebs_concurrent_queues_target_processes{concurrent_queue_name=~".*OPP.*"} * 0)
)
< on(client, manager, link) group_right()
oracledb_ebs_concurrent_queues_target_processes{concurrent_queue_name=~".*OPP.*"}

内容的提问来源于stack exchange,提问作者xafer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 11:04:57