首页 > 解决方案 > 如何在 PromQL 正则表达式中编写条件?

问题描述

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

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

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

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

标签: regexprometheusgrafanapromqlre2

解决方案


一种解决方法可能是自Grafana 版本 7.3以来可用的键/值自定义变量

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

val1 : label_val1, val2 : label_val2

在此处输入图像描述


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

some_metric{my_label=~"$var"}


推荐阅读