首页 > 解决方案 > 如何用 1 个 sql-query 定义多个图

问题描述

当我在 grafana 中使用 prometheus (promql) 作为数据源时,我可以定义在同一面板上显示多个图形的单个查询(例如 http_requests_total 显示所有 http 请求)。现在我想对 sql 数据源做同样的事情。我有一个包含时间序列数据的表,作为带有一些标签的简单计数器。我想将每个标签的 counter_value 显示为图表。当我为每个标签定义一个查询时,它会起作用。但是这个解决方案并不是真正可维护的,因为标签可能会有所不同。我希望只有 1 个查询,因为它适用于 promql。有没有办法定义一个查询,为每个标签显示一个图表?

在此示例中,仅显示了 1 个图表。我尝试使用 group by 和我的标签列,但没有成功。

SELECT
  $__timeGroupAlias(created,24h),
  sum(counter_value) AS "counter_value"
FROM counter
GROUP BY 1
ORDER BY 1

标签: prometheusgrafanapromql

解决方案


查看查询变量

查询变量允许您使用 SQL 查询动态构造变量,然后可以在仪表板中引用该变量。

您可以使用这样的查询从表中获取所有标签值:

SELECT tag FROM counter
GROUP BY tag;

我不是 100% 确定,但听起来您可以通过使用查询变量来获得所有想要的值,然后使用重复面板选项来解决您的问题。重复面板选项将为每个变量值重复图表。例如,如果您有一个tag_var返回值的查询变量tag_a, tag_b, tag_c,您可以通过启用重复面板选项来执行类似的操作tag_var

SELECT
  $__timeGroupAlias(created,24h),
  sum(counter_value) AS "counter_value"
FROM counter
WHERE tag_value = '$tag_var'
GROUP BY 1
ORDER BY 1

推荐阅读