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

含sum by(status)的Prometheus组合查询无结果问题排查

问题分析与排查思路

你的问题核心是**on(status)操作符的使用场景错误**,导致两个查询结果无法匹配,进而返回空数据。以下是具体排查和修正步骤:

1. 先明确两个单独查询的返回结构

分别执行以下两个查询,查看返回的样本标签:

  • 第一个查询结果:
    sum by(status) (increase(number_of_tasks_total{queue=~"$queuename", kubernetes_namespace=~"$namespace", status="unique"}[1h]))
    
    返回的样本标签为 status="unique",对应一个数值。
  • 第二个查询结果:
    sum by(status) (increase(number_of_tasks_total{queue=~"$queuename", kubernetes_namespace=~"$namespace", status="enqueued"}[1h]))
    
    返回的样本标签为 status="enqueued",对应一个数值。

这两个样本的status标签值完全不同,而on(status)操作符的作用是仅匹配两边status标签值相同的样本进行运算——显然这里没有符合条件的匹配对,所以减法运算返回空。

2. 修正查询的正确写法

你的需求是计算unique状态任务增量与enqueued状态任务增量的差值,不需要使用on(status),直接将两个聚合结果相减即可:

sum by(status) (increase(number_of_tasks_total{queue=~"$queuename", kubernetes_namespace=~"$namespace", status="unique"}[1h])) - sum by(status) (increase(number_of_tasks_total{queue=~"$queuename", kubernetes_namespace=~"$namespace", status="enqueued"}[1h]))

或者更简洁(因为每个查询已经过滤了单个status,sum后无需保留status标签的话):

sum(increase(number_of_tasks_total{queue=~"$queuename", kubernetes_namespace=~"$namespace", status="unique"}[1h])) - sum(increase(number_of_tasks_total{queue=~"$queuename", kubernetes_namespace=~"$namespace", status="enqueued"}[1h]))

3. 关于你的疑问解答

  • 为何sum by(status)后标签不匹配?:不是标签不匹配,是标签值完全不同,on(status)要求的是相同标签值的样本匹配,而非仅存在status标签。
  • Prometheus是否有隐藏标签或隐式行为?:没有隐藏标签,sum by(status)会严格只保留status标签;increase函数仅计算增量,不会修改或添加标签,完全保留原始序列的标签(除聚合操作修改的部分)。
  • increase函数是否影响标签?:不会,increase属于瞬时向量函数,仅修改样本值,不改变标签集合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 12:45:10