1

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

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 map 的 key 端作为 ID 在 DB 中查询
  2. 使用值侧作为统计面板的标签,如果我在图表中查询,还作为测量的别名

我已经阅读了格式化文档,他们提到的只是列表;那里没有键/值示例,当然也没有这样做的。这显然是一个新功能(这里是合并其实现的 GH 问题),所以我希望某处只有一个文档缺失。

4

2 回答 2

0

我意识到这可能不是您所需要的所有信息,但希望它有用。我在尝试自己实现类似的东西(也使用 InfluxDB)时遇到了这个问题,并且我设法访问了查询中的键和值

我的查询如下所示:

SELECT "Foo.${VariableName:text}.Bar.${VariableName:value}" FROM "db" WHERE (filters, filters) AND $timeFilter GROUP BY "bas"

如您所见,我的用例与您尝试实现的有点不同,但它表明基本上可以访问查询中的键和值。

于 2021-08-16T07:55:20.107 回答
-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 结果 - 它只返回时间序列(这不是 key=>value)或仅值或仅键。

解决方法:

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

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

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

于 2021-02-13T10:09:31.460 回答