PromQL“if”条件“and”“or”运算符

问题描述 投票:0回答:1

在PromQL中,我想写

If metric_a>=bool 3:
  return metric_b
else:
  return 1

我想写成

(metric_b and metric_a>=3) or metric_a<bool 3

但是我发现当我切换度量顺序时,例如A或B,B或A,查询结果会改变,也不确定我所拥有的是否意味着我的if-else 为什么或/与运算符会给出不一致的结果?另外,在这里呈现 if-else 语句的最佳方式是什么?

operators prometheus promql
1个回答
4
投票

我检查了您提出的解决方案:

(metric_b and metric_a>=3) or metric_a<bool 3

它的工作方式与预期一致,当 metric_a >= 3 时返回 metric_b 的值,否则返回 1。

需要注意的是,“VECTOR1 和 VECTOR2”并不一定等于“VECTOR2 和 VECTOR1”。看一下 Prometheus 相关文档

向量 1 和向量 2 产生一个由以下元素组成的向量 矢量 1 中的矢量 2 中存在完全匹配的元素 标签集。其他元素被删除。

结果始终来自“and”子句的第一个向量。

例如以下查询:

enter image description here

给出与以下结果不同的结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.