如何在 Grafana + InfluxDB 中使用键/值仪表板变量?

时间:2021-02-12 01:55:54

标签: grafana influxdb grafana-templating grafana-variable

我想弄清楚如何格式化我的键/值对仪表板变量。我有一个变量,它的定义是:

sensor_list = 4431,8298,11041,13781
sensor_kv = 4431 : Storage,8298 : Stairs,11041 : Closet,13781 : Attic

但是,我似乎无法通过 InfluxDB 有效地将它用于查询和仪表板格式。例如,我有一个面板,它的查询是这样的:

SELECT last("battery_ok") FROM "autogen"."Acurite-Tower" WHERE ("id" =~ /^$sensor_list$/) AND $timeFilter GROUP BY time($__interval) fill(null)

那行得通,但如果我用 KV 替换它,我就无法获得值:

SELECT last("battery_ok") FROM "autogen"."Acurite-Tower" WHERE ("id" =~ /^$sensor_kv$/) AND $timeFilter GROUP BY time($__interval) fill(null)

^ 返回时没有数据。

我也不知道如何访问 KV 对的,比如重复面板的模板值。 ${sensor_kv:text} 返回单词“All”,但 ${sensor_kv:value} 实际上会导致直接错误:“错误:未找到变量格式值”

我的目标是双重的:

  1. 使用 kv 映射的 key 端作为 ID 在 DB 中查询
  2. 如果我在图表中进行查询,则将值侧用作统计面板的标签以及测量值的别名

我读过formatting docs,他们提到的都是列表;那里没有键/值示例,当然也没有这样做。这显然是一个新特性 (here is the GH issue where its implementation is merged),所以我希望只是某个地方有一个文档遗漏。

1 个答案:

答案 0 :(得分:-1)

键/值正在使用一些有意义的时间序列数据库,例如MySQL https://grafana.com/docs/grafana/latest/datasources/mysql/

<块引用>

另一个选项是可以创建键/值变量的查询。查询应返回名为 __text 和 __value 的两列。 __text 列值应该是唯一的(如果它不是唯一的,则使用第一个值)。下拉列表中的选项将包含一个文本和值,允许您将友好名称作为文本,将 id 作为值。

但这不是 InfluxDB 的情况:https://grafana.com/docs/grafana/latest/datasources/influxdb/ InfluxDB 无法返回 key=>value 结果 - 它仅返回时间序列(不是键=> 值)或仅返回值或仅返回键。

解决方法:

1.) 使用受支持的数据库(MySQL、PostgreSQL)只是为了获得正确的 key=>value 结果。你真的不需要为此创建表,只需组合 SELECT、UNION、... 就可以得到想要的结果。

2.) 使用隐藏变量,它将“翻译”值到键,然后在查询中使用。例如。 https://community.grafana.com/t/how-to-alias-a-template-variable-value/10929/3

当然,一切都有利有弊,例如多值变量值可能无法按预期工作。