Grafana 引用数据集变量以使用 Postgres 驱动程序转换图例值

Posted

技术标签:

【中文标题】Grafana 引用数据集变量以使用 Postgres 驱动程序转换图例值【英文标题】:Grafana Reference DataSet Variable to Translate Legend Values using Postgres Driver 【发布时间】:2020-08-05 22:59:36 【问题描述】:

我在 Grafana 中有一个经过规范化的 postgres 数据源,这将我的图形可视化图例限制为仅显示我的记录的 ID(哈希)。我想让这个人类可读,但 id -> 名称映射位于不同的数据源/postgres 数据库中。

Grafana 支持模板变量,我认为这可以让我加载我的 id -> 命名参考数据,但没有关于如何在 postgres 驱动程序的查询编辑器中将 label_values 作为参考表访问的明确文档。

有没有办法配置模板变量以加载参考数据(id -> 名称)并利用它在 grafana postgres 驱动程序中转换我的指标/图例 ID?

例如(伪grafana postgres 查询编辑器):

SELECT
  $__timeGroupAlias(start,$__interval),
  animal_names.__value AS metric,
  count(dog.chewed_bones) AS “# bones chewed“
FROM animals.dog dog
JOIN $TEMPLATE_VAR_REF_DATA animal_names ON dog.id = animal_names.__text
WHERE $__timeFilter(start_time)
GROUP BY 1,2
ORDER BY 1,2

我找到的最接近的答案在这里,但没有详细说明: johnymachine 的评论@https://github.com/grafana/grafana/issues/1032

【问题讨论】:

【参考方案1】:

我意识到 github 评论意味着使用 jsonb 聚合函数作为变量,如下面的解决方案:

仪表板变量(类型查询):select jsonb_object_agg(id,name) from animal_names;

Grafana Postgres 伪查询:

SELECT
  $__timeGroupAlias(start,$__interval),
  animal_names::jsonb ->> dog.id::text AS metric,
  count(dog.chewed_bones) AS “# bones chewed“
FROM animals.dog
WHERE $__timeFilter(start_time)

【讨论】:

以上是关于Grafana 引用数据集变量以使用 Postgres 驱动程序转换图例值的主要内容,如果未能解决你的问题,请参考以下文章

Grafana 变量引用 prometheus 统计名称的一部分

如何在grafana中引用电子邮件警报的消息正文中的变量?

Grafana/InfluxDB:查询在面板中工作,而不是在变量中

Grafana 中的条件模板值

如何在 grafana 仪表板中查询 influxdb 以创建模板变量

Grafana:警报查询中不支持模板变量