【问题标题】:PromQL if then statement equivalentPromQL if then 语句等效
【发布时间】:2021-06-04 03:59:12
【问题描述】:

我有一个执行计数的简单 PromQL 查询:

sum(up{container_name="my-container",environment_name="$env"})

这是 Grafana 仪表板的一部分,允许从下拉菜单中选择 ${env}。

我想根据环境执行不同的查询。

我如何在 PromQL 中构造这样的东西:

if ${env} == 'dev' or ${env} == 'integration':
  if sum(up{container_name="my-container",environment_name="$env"}) == 1:
    sum(up{container_name="my-container",environment_name="$env"}) + 1
  else:
    sum(up{container_name="my-container",environment_name="$env"})
else:
  sum(up{container_name="my-container",environment_name="$env"})

目的是在运行单个容器的环境中错误地增加计数以触发 RAG 状态面板中的健康阈值。

【问题讨论】:

    标签: prometheus grafana promql


    【解决方案1】:

    你可以这样查询:

    (
       sum(up{container_name="my-container", environment_name=~"dev|integration", environment_name="$env"}) + 1 
       AND
       (sum(up{container_name="my-container", environment_name=~"dev|integration", environment_name="$env"} == 1)
    )
    OR
    sum(up{container_name="my-container", environment_name=~"dev|integration", environment_name="$env"}) != 1
    OR
    sum(up{container_name="my-container", environment_name="prod", environment_name="$env"})
    OR
    on() vector(0)
    

    当实例数量为 1(and 所做的)并且用户选择了开发或集成环境时,这将返回实例数量加一。 or 将同时包含三个指标,但由于查询和用户选择,只能返回一个指标。

    【讨论】:

    • 这真的很有趣 - 这个“~”是否包含特殊字符?它似乎在 Grafana 中引发了解析错误。
    • 抱歉,我刚刚修好了。运算符是“=~”而不是“~=”。这意味着匹配正则表达式
    • 请不要道歉,没有数据集来测试它是如此困难您的帮助非常宝贵,让我可以进行查询,但我有几个问题。 env= 应该读取 environment_name 因为 $env 是一个 Grafana 变量,所以不能在 PromQL 中使用(对不起,我不清楚这一点)。第 7 行在开头缺少一些细节(我假设为 up{container_name="my-container",)。第7行的目的是什么?最后最后一行需要为 up 上的多个回报添加总和,但这是唯一需要总和的地方,也许第 7 行也是如此?
    • 第 7 行缺少 container_name 选择器,这是真的,正在修复它。它的目的是前两行的 else 部分,因此当第一行没有时创建一个指标(因为它的值不是 1),所以它可能是 0 或 2 或更多。
    • 是的,我猜它可能是静止的并且是错误的。如果您无法测试查询并查看它们是否返回预期结果,这很困难
    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多