PromQL查询cpu_usage_value or memory_usage_value仅返回CPU指标问题咨询
问题根源
你对vector1 or vector2的规则理解少了一个非常容易踩坑的默认设定:PromQL 做向量二元匹配运算时,默认会把内置的__name__标签(也就是存储指标名的标签)排除在匹配键之外。
你当前执行的查询:
cpu_usage_value or memory_usage_value
判定两个元素“标签集匹配”的逻辑是:忽略__name__的差异,剩下的所有标签(比如job/instance/host这类采集和业务标签)完全一致就算匹配。绝大多数场景下,CPU和内存使用率指标都是同个exporter在同个采集任务下上报的,除了指标名之外其余标签完全对齐——这就导致memory_usage_value的所有元素都会被判定为和左侧cpu_usage_value的元素匹配,按照or的运算规则,匹配到的元素只会保留左侧vector1的内容,右侧匹配的元素会被全部丢弃,自然看不到内存相关的结果。
除此之外还有一种低概率情况:查询的时间点上memory_usage_value本身没有有效样本(比如指标名拼写错误、对应采集任务异常、选择的时间范围在该指标开始上报之前),也会导致右侧无结果返回。
修复方案
根据实际场景选对应处理方式即可:
- 如果你需要同时返回两个指标的所有样本,只需要通过
on()明确指定把__name__纳入匹配判定的标签范围,强制要求指标名也一致才算匹配:
执行后会完整保留两个指标的所有原始标签集和样本值。cpu_usage_value or on(__name__) memory_usage_value - 如果是指标本身无数据导致的问题,先单独执行
memory_usage_value确认是否有返回,核对指标名拼写、对应采集任务的运行状态,确保查询时间范围内该指标有正常上报的样本即可。
快速排查tip:遇到二元运算结果不符合预期时,可以先分别单独执行两个向量的查询,确认两边各自的标签集和样本情况,能快速定位是匹配逻辑问题还是数据源问题。
内容的提问来源于stack exchange,提问作者Manish Purohit
相关产品推荐
相关产品推荐

