使用 Grafana 和 MySQL 在同一时间序列上绘制多个序列
Posted
技术标签:
【中文标题】使用 Grafana 和 MySQL 在同一时间序列上绘制多个序列【英文标题】:Plot more than one series on the same time series using Grafana and MySQL 【发布时间】:2022-01-13 03:54:09 【问题描述】:我有多个服务器报告一个值(温度或可靠性分数)。我想将它们绘制在同一个时间序列上。每个指标随时间变化的价值。
表格是这样的
Total Reliability
Time | value | metric
2021-12-07 08:24:20 | 0.994 | 2787
2021-12-07 08:25:18 | 0.996 | 3129
2021-12-07 08:25:34 | 0.994 | 2787
2021-12-07 08:26:31 | 0.996 | 3129
2021-12-07 08:26:48 | 0.994 | 2787
2021-12-07 08:27:44 | 0.996 | 3129
我阅读了一些类似的问题,但由于某种原因他们的解决方案不起作用
SELECT
time AS “time”,
reliability as value,
machine_id as metric
FROM machine
WHERE
$__unixEpochFilter(time)
GROUP BY machine_id,time
ORDER BY time asc
如果我删除分组以绘制两列
使用 Grafana v8.2.5 (b57a137acd) 和 mysql 服务器 8.0.27
【问题讨论】:
我可以通过查询每个系统来做到这一点,但由于我不知道会有多少台服务器或 machine_ID 是什么,我需要找到一种方法让 tot 对其进行分组跨度> 【参考方案1】:指标应该是字符串。在你的情况下它看起来像一个整数,所以破解machine_id as metric
:
CONCAT(machine_id , '') AS metric
使用Grafana MySQL macros 进行时间聚合。那么最终具有 5m avg 聚合的 Grafana SQL 查询应该是:
SELECT
$__timeGroup(time,'5m'),
AVG(reliability) AS value,
CONCAT(machine_id, '') AS metric
FROM machine
WHERE $__unixEpochFilter(time)
GROUP BY machine_id, time
ORDER BY time ASC
它仍然可能需要一些小的调整。
【讨论】:
【参考方案2】:我用这个。
SELECT
time AS "time",
reliability AS value,
CONCAT(machine_id, '') AS metric
FROM machine
WHERE
$__unixEpochFilter(time)
ORDER BY time
【讨论】:
这会选择原始数据 - 当您选择较长的时间范围(例如 1 个月)时,它可能会返回大量数据,并且您的浏览器可能无法处理这些数据(高内存、cpu 利用率) .强烈建议使用时间聚合。以上是关于使用 Grafana 和 MySQL 在同一时间序列上绘制多个序列的主要内容,如果未能解决你的问题,请参考以下文章
Mysql/ Grafana 计算/显示最后一小时/天/周/月的重量增量/减量
如何在 Grafana 的 MySQL 查询中使用 like?
Grafana:使用字符串类型的 MySQL 表列作为图形的 X 轴