Построение более одной серии в одном и том же временном ряду с использованием Grafana и MySQL

#mysql #grafana

#mysql #grafana

Вопрос:

У меня есть несколько серверов, сообщающих значение (показатель температуры или надежности). Я хочу построить их в одном и том же временном ряду. значение с течением времени для каждой метрики.

таблица выглядит следующим образом

 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 AStime”,
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 Server 8.0.27

Комментарии:

1. Я могу сделать это с помощью запроса для каждой системы, но поскольку я не знаю, сколько будет серверов или какие будут machine_IDs, мне нужно найти способ для tot сгруппировать его

Ответ №1:

Метрика должна быть строковой. В вашем случае это выглядит как целое число, так что взломайте machine_id as metric :

 CONCAT(machine_id , '') AS metric
 

Используйте макросы Grafana MySQL для объединения времени. Затем окончательный SQL-запрос Grafana с агрегацией 5m avg должен быть:

 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. При этом выбираются необработанные данные — при выборе более длительного временного диапазона (например, 1 месяц) может быть возвращено много данных, и у вашего браузера могут возникнуть проблемы с обработкой этих данных (большой объем памяти, загрузка процессора). Настоятельно рекомендуется агрегирование времени.