【问题标题】:PromQL If condition and or operatorPromQL If 条件和或运算符
【发布时间】:2022-01-07 18:28:28
【问题描述】:

在 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 为什么 or/and 运算符会给出不一致的结果?还有什么是在这里呈现 if-else 语句的最佳方式?

【问题讨论】:

    标签: operators prometheus promql


    【解决方案1】:

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

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

    它按预期工作,当 metric_a >= 3 时返回 metric_b 的值,否则返回 1。

    请务必注意,“VECTOR1 和 VECTOR2”不一定等于“VECTOR2 和 VECTOR1”。看看Prometheus documentation about this

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

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

    例如,以下查询:

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

    【讨论】:

    • 谢谢!但是,如果我说“(metric_a>=3 and metric_b) or metric_a=3 and metric_b)”,为什么情况会改变呢?
    • 我刚刚添加了更多信息。
    猜你喜欢
    • 2022-12-11
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 2019-10-20
    • 2023-03-03
    • 2017-03-21
    相关资源
    最近更新 更多