【问题标题】:How can I write conditionals in a PromQL regex?如何在 PromQL 正则表达式中编写条件?
【发布时间】:2021-03-29 13:22:28
【问题描述】:

我有一个自定义 Grafana 变量 $var,我在 Prometheus 查询中使用它来检索一些数据。根据此变量的值,我正在使用的指标的标签值应相应更改。换句话说,我想在正则表达式中对这个变量使用条件。请参见下面的示例:

some_metric{my_label=~"(?($var=val1)label_val1|label_val2)"}

如果$var 等于val1,上述查询将导致my_label 等于label_val1,而在所有其他情况下label_val2。但是,Prometheus 用于正则表达式的 RE2 语法似乎不支持这一点。有没有其他方法可以实现这种行为?

注意:$var 变量控制着我仪表板中的大多数其他变量,并且它已经有一个 key/value mapping,所以我不能采用这种解决方法。我正在考虑创建一个额外的自定义变量,它也依赖于$var,但是 Grafana 似乎也不支持这个。

【问题讨论】:

  • RE2 不支持任何环视、条件等。您不能使用这样的普通正则表达式方法。
  • @WiktorStribiżew 在 Prometheus 中是否有任何解决方法?

标签: regex prometheus grafana promql re2


【解决方案1】:

一种解决方法可能是自 Grafana 版本 7.3 以来可用的 key/value custom variable

您将创建一个变量并拥有键值对:

val1 : label_val1, val2 : label_val2


然后在您的 PromQL 中,您将照常引用该变量:

some_metric{my_label=~"$var"}

【讨论】:

  • 感谢您的回复。不幸的是,我不能使用这个解决方法,因为变量$var 已经有另一个映射,我无法摆脱它。此变量控制我仪表板中的大多数其他变量。我什至在考虑创建一个额外的自定义变量,这也取决于$var,但似乎 Grafana 也不支持链接两个自定义变量......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
相关资源
最近更新 更多