我在 Prometheus 查询中遇到一个特殊问题,即组合两个查询会导致没有数据,即使每个单独的查询都返回结果。目标是计算 1 小时内不同状态的任务数量差异。这是组合查询:
sum by(status) (increase(number_of_tasks_total{queue=~"$queuename", kubernetes_namespace=~"$namespace", status="unique"}[1h])) - on(status) sum by(status) (increase(number_of_tasks_total{queue=~"$queuename", kubernetes_namespace=~"$namespace", status="enqueued"}[1h]))
期望的是,在 sum by(status) 之后,唯一剩下的标签应该是 status,从而允许减法运算正确工作。但是,我通过这个组合查询没有得到任何结果。
要点:
每个单独的查询部分都可以正常工作并返回数据。 这个问题似乎与 sum by(status) 后的标签不匹配有关,但我不确定为什么会发生这种情况,因为 status 应该是聚合后剩下的唯一标签。 查询中使用了变量 $queuename 和 $namespace,它们似乎按预期运行。 问题:
当 sum by(status) 应确保仅存在状态标签时,为什么会出现标签不匹配?
Prometheus 中是否存在任何隐藏标签或隐式行为可能导致此意外结果?
增加函数是否会以一种不立即明显的方式影响标签?
任何有关如何调试此问题的见解或建议将不胜感激!
您的查询问题在于操作数的标签状态不匹配:LHS 产生
status="unique"
,RHS - status="enqueued"
。
当您编写
on(status)
时,您指示 Prometheus 仅使用列表中的标签来匹配操作数(忽略所有其他标签),但这种匹配是通过标签值的完全相等来完成的。
因此在您的查询中应使用
on()
来代替。