【问题标题】:Plot more than one series on the same time series using Grafana and MySQL使用 Grafana 和 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 对其进行分组跨度>

标签: mysql grafana


【解决方案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 利用率) .强烈建议使用时间聚合。
    猜你喜欢
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2019-12-02
    • 2020-09-05
    • 1970-01-01
    • 2018-11-19
    相关资源
    最近更新 更多