如何将一个变量的值映射到 Grafana 中的另一个变量?

Ste*_*e K 7 grafana prometheus

在我的 Grafana 仪表板(使用 Prometheus 作为数据源)中,我有一个自定义$tier变量,它允许用户从下拉列表中选择层。它的定义为:

Values separated by comma: production, stage, development
Run Code Online (Sandbox Code Playgroud)

我需要通过包含层名称的缩写版本的标签来过滤 Prometheus 指标:

  • “foo-dev”
  • “foo 舞台”
  • “foo-产品”

我想我应该创建一个隐藏变量,$shortened_tier这样我就可以在查询过滤器中使用它,如下所示:

my_label=~"foo-$shortened_tier"
Run Code Online (Sandbox Code Playgroud)

我想根据以下值来定义它$tier

  • “开发”->“开发”
  • “舞台”->“舞台”
  • “生产”->“产品”

我怎么做?

Ste*_*e K 7

我想出了一个解决方法,但它是suuuuper hacky:

Name: shortened_tier
Type: Query
Data Source: Prometheus
Query: label_values(up{env="$tier"}, env)
Regex: (dev|stage|prod).*
Run Code Online (Sandbox Code Playgroud)

我想做的很简单Query: $tier,但由于 Grafana 不允许我这样做,所以我必须使用完全不同的指标 ( up),我可以传入$tier并返回与字符串相同的精确值。然后我使用正则表达式来查找dev|stage|prod字符串的开头,捕获该部分,并丢弃其余部分。

这就是我正在寻找的结果,其值$shortened_tier根据选择并分配给 的值动态变化$tier。但希望 Grafana 有一种不那么老套的方式来做到这一点。