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

使用absent函数结合正则时Prometheus查询不返回instance属性的解决方法

解决Prometheus告警缺失实例标签的问题

问题分析

你当前使用的absent(namedprocess_namegroup_num_threads{groupname="tnslsnr",instance=~"instance01|instance02|instance03"})查询,在进程缺失时只会返回带有groupname="tnslsnr"标签的结果,无法定位具体是哪个实例的进程消失——原因是absent会聚合所有匹配的序列,丢失instance维度。

解决方案

可以通过构造预期实例的向量,结合unless操作符筛选出缺失进程的实例,无需拆分多个查询:

# 构造包含所有目标实例的向量
(vector(1) {instance="instance01"} or vector(1) {instance="instance02"} or vector(1) {instance="instance03"})
# 排除存在正常进程指标的实例
unless namedprocess_namegroup_num_threads{groupname="tnslsnr"}

原理说明

  1. 第一部分通过vector(1)为每个目标实例创建一条带对应instance标签的时间序列;
  2. unless操作符会保留左侧向量中不存在于右侧向量的条目,也就是那些没有namedprocess_namegroup_num_threads指标的实例;
  3. 最终结果会显示所有进程缺失的实例标签,方便直接定位问题节点。

替代方案(基于时间范围检测)

如果需要检测实例在一段时间内完全没有进程指标,可以使用absent_over_time并保留instance维度:

absent_over_time(namedprocess_namegroup_num_threads{groupname="tnslsnr",instance=~"instance01|instance02|instance03"}[1m]) by (instance)

注:这里的[1m]是检测时间窗口,可根据实际采集间隔调整,确保能覆盖至少一次采集周期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:05:16