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

Prometheus查询逻辑实现及and运算符异常结果疑问

实现条件分支的Prometheus查询

要实现「当查询A的结果大于0时返回查询B,否则返回查询C」的逻辑,有两种常用写法:

  • 用if表达式配合or:
(B if (A > 0)) or C

逻辑是:如果A>0的条件成立,就返回B的结果;否则执行后半段的C。

  • 用乘法配合or(更严谨的标签匹配处理):
(A > 0) * B or (A <= 0) * C

当A>0时,A>0会输出值为1的序列,乘以B后得到B的结果;当A<=0时,A<=0输出值为1的序列,乘以C得到C的结果,or会自动取非0的那组结果。

解释(1 and 0)与(0 and 1)的返回结果

这是因为Prometheus的and不是传统的数值逻辑与,而是标签匹配过滤操作,规则是:

  1. 先计算左边表达式,得到一组时间序列
  2. 再计算右边表达式,得到另一组时间序列
  3. 最终返回左边表达式中,和右边表达式标签完全匹配的序列,并且保留左边序列的原始数值

具体到你的测试:

  • (1 and 0):左右两边都是无标签的序列,标签匹配成功,所以返回左边的数值1
  • (0 and 1):同样标签匹配成功,返回左边的数值0

如果要做数值层面的逻辑与运算,需要加上bool修饰符,这样会返回布尔结果(1或0):

bool (1 and 0)  // 返回0
bool (0 and 1)  // 返回0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:07:12