Grafana 变量模板正确,但未单独渲染每个系列

问题描述 投票:0回答:1

我正在尝试了解有关 Grafana 的更多信息,并拥有一个包含 Kubernetes 集群节点 CPU 温度的表。我知道这可以通过其他方式实现,但只是想使用单个查询创建一个仪表板,该查询使用一个变量从 MySQL 表中提取节点名称,然后适当地呈现每个集群节点温度系列。

变量“Nodes”返回数据库表中的正确节点。结果是这样的:

所有,k3s19,k3s18,k3s17,等等...

实际查询是:

SELECT UNIX_TIMESTAMP(TempTime) AS "time", CTemp
    FROM cputemperature.Temperatures
    WHERE $__timeFilter(TempTime) and ClusterNode in ( $Nodes );

结果是单个时间序列,其中包含仪表板的所有选定节点变量结果。当然,选择单个节点效果很好,但多重选择无法按照所述渲染每个节点的单独时间序列温度。

我还尝试将“Nodes”变量格式化为

${Nodes:sqlstring}

我意识到我需要以某种方式组织各种时间序列,但不确定如何组织。我通过为每个节点创建一个 Grafana 查询来完成所有这些工作,这很乏味,当我向集群添加其他节点时,我必须添加更多查询,但希望它使用 Nodes 变量来确定节点记录的温度并使用一个 Grafana 查询来渲染每个节点系列的每个温度。

感谢您的帮助!

SELECT UNIX_TIMESTAMP(TempTime) AS "time", CTemp
    FROM cputemperature.Temperatures
    WHERE $__timeFilter(TempTime) and ClusterNode in ( $Nodes );

在仪表板的“节点”变量中生成多个选定节点的温度的单个时间序列。

variables time-series grafana multi-select
1个回答
0
投票

您的选择中没有节点,因此这就是 Grafana 仅使用单个时间序列的原因。尝试:

SELECT 
  $__time(TempTime),
  ClusterNode AS "metric",
  CTemp AS "value"
FROM cputemperature.Temperatures
WHERE 
  $__timeFilter(TempTime) 
  AND ClusterNode in ($Nodes)

但这可能会选择太多数据点,因此最好选择聚合值 - 它对于任何仪表板时间范围(1 天、1 年……)都会更好,例如:

SELECT 
  $__timeGroup(dateColumn, $__interval),
  ClusterNode AS "metric",
  AVG(CTemp) AS "value"
FROM cputemperature.Temperatures
WHERE 
  $__timeFilter(TempTime) 
  AND ClusterNode in ($Nodes)
GROUP BY 1,2

有关使用的宏,请参阅Grafana MySQL 文档

© www.soinside.com 2019 - 2024. All rights reserved.