@Zorgios

Почему Grafana не может получить данные с базы данных при выборе диапазона, отличного от 6 часов?

Вкратце структура проекта:
1) База данных mySql, куда каждую минуту в таблицу machines_records пишется N строк с массивом JSON в качестве одного из параметров
2) Временную зону поставил уже +03:00, так как тестировал разные причины ошибок в работе с графаной (если нужно будет вернуть на Гринвич - дайте знать)
3) Есть представление machines_records_expanded чтобы парсить эти строки таблицы machines_records для отображения данных в графане, код для создания представления был:
CREATE OR REPLACE VIEW machines_records_expanded AS
SELECT 
    mr.id,
    mr.machine_id,
    m.unique_number,
    jt.`time`,
    jt.tube,
    jt.lamp
FROM 
    machines_records_new mr
    JOIN machines m ON mr.machine_id = m.id,
    JSON_TABLE(mr.record, '$[*]' COLUMNS (
        `time` DATETIME PATH '$.time',
        `tube` INT PATH '$.tube',
        `lamp` INT PATH '$.lamp'
    )) jt;

Как несложно понять - цель мониторить состояние tube и lamp в нужный период времени
Представление данные разбирает прекрасно, структура сохраняется

Пытаюсь в Графане настроить отображение данных запросом
SELECT
  `time` AS "time",
  tube,
  lamp
FROM
  machines_records_expanded
WHERE
  unique_number = '401'
  AND $__timeFilter(`time`)
ORDER BY
  `time`;


По умолчанию стоит диапазон данных за последние 6 часов
Все отображает корректно
669ba893d406b467621744.png
Но пытаюсь сузить круг до диапазон меньше 6 часов и Графана отказывается получать данные с таблицы. Просто, без ошибок. No data
669ba8abe9477120700874.png
669ba8c8cff29332636056.png
Вариант с диапазоном больше 6 часов (например, за последние 12 часов) - работает. А вот меньше - уже нет.

Полагаю, проблема может быть еще в том, что данные в таблице имеют временную зону UTC (то есть -3 от МСК), а вот в Графане почему-то отображаются корректно. Но именно при уменьшении диапазона какие-то фокусы
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
@Zorgios Автор вопроса
Проблема была в часовом поясе. Добавил временную зону в запрос и всё успешно собралось
SELECT
  CONVERT_TZ(time, '+03:00', '+00:00') AS "time",
  lamp,
  tube
FROM machines_records_full
WHERE
  time BETWEEN FROM_UNIXTIME($__unixEpochFrom()) AND FROM_UNIXTIME($__unixEpochTo()) AND
  machine_id = 1
GROUP BY time
ORDER BY time;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы