我正在尝试了解有关 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 );
在仪表板的“节点”变量中生成多个选定节点的温度的单个时间序列。
您的选择中没有节点,因此这就是 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 文档。