Одним из наиболее популярных бесплатных пакетов для отображения временнЫх рядов различных параметров является Grafana. За последнее время мне пришлось разобраться с рядом ее возможностей, и я хотел бы поделиться с вами конспектом с результатами. Займут эти записи несколько заметок, и я их буду выкладывать по мере написания
Начну с самого простого и, вероятно, очевидного.
Установка Grafana
Штатно Grafana может использоваться тремя вариантами - с прямой установкой в ОС, в виде docker-контейнера или в виде облачного решения. Я пользовался первыми двумя (во всех случаях - open source вариант), до третьего руки не дошли. Лично мне работать с контейнером на базе Alpine Linux комфортней, но "на вкус и цвет все фломастеры разные".
В случае установки напрямую дистрибутив находится вот здесь:
Ссылка на Docker-контейнер находится здесь: https://hub.docker.com/r/grafana/grafana
И там, и там - отдельный веб-сервер не нужен, всё необходимое находится внутри пакета.
Конфигурирование и использование выполняется через веб-клиента, по умолчанию порт 3000. Пароль администратора по умолчанию admin/admin, по-моему при первом входе система настоятельно просит его поменять.
Подключение Grafana к БД
Grafana представляет собой пакет, предназначенный для отображения и анализа различных рядов вида "параметр от времени", самостоятельно эти данные не хранит. Для этого где-то рядом должна находиться БД.
Лично у меня был опыт работы с MySQL, MariaDB и InfluxDB. Во всех случаях использовались встроенные драйвера.
Подключение выполняется по стандартному порту (для MySQL - 3306), соединение может защищаться как парой логин-пароль, так и с использованием сертификатов. Для InfluxDB используются токены. Напоминаю рекомендацию, что по причинам кибербезопасности пользователь Графаны должен внутри БД иметь права read-only.
После прописывания источника имеется кнопка "Save and Test", что является крайне удобным (проверка правильности настроек не требует смены экрана и прочих телодвижений).
Выборка значений из БД
Начнем с базового отображения. И сопутствующих "граблей".
Основными "граблями" при использовании Grafana является то, что каждая запись, попадающая из БД для отображения, должна сопровождатьcя отметкой времени. Вся система выборки значений опёрта на это положение. Обойтись без этого попробовать можно, но это будет очень "больно" для разработчика. Зато когда это есть - процесс заметно упрощается. Для отметки времени я пользовался полями с типами DATETIME (простановка значения принудительно) и TIMESTAMP (простановка значения времени автоматически в момент INSERT) - работает одинаково, проблем (за исключением timezone :) не возникало.
Небольшая ремарка. Последний мой проект, из которого я беру скриншоты, посвящен анализу статистики привлечения обучающихся на цифровой курс по KasperskyOS. Поэтому оттуда и "торчат" названия полей, заголовки экранов и т.п. :)
При этом, значение времени может как отображаться на экране, так и не отображаться. Это можно использовать для различных стратегий отображения.
Фактически при формировании новой панели к графическому индикатору привязывается один или несколько SQL-запросов, выбирающих из таблицы значения, попадающие в нужный интервал времени. Селектор временнОго интервала является частью оболочки, отказаться от него нельзя.
Если на индикаторе необходимо одновременно вывести более одной величины (например, два графика в одних осях) - это может быть сделано как раздельными запросами, так и несколькими колонками одного запроса.
При необходимости ручного редактирования запроса - есть кнопка Edit SQL, и эта фича нам понадобится.
Также справа вверху этого блока есть кнопка Query Inspector. Скриншот я снимать не буду, но там есть как просмотр запроса, так и возвращаемые БД значения и время отработки запроса. Функция крайне полезна в случаях, когда выборка из базы выполняется корректно, а на экране отображается не то, что надо.
Структура страниц
Для размещения индикатора или какого-то статичного комментария используется единица размещения информации - панель.
Панели (panel) объединяются в страницы (или экраны, dashboard), которые могут храниться в виде древовидной структуры. Страницы имеют раздельную настройку прав (редактирование/просмотр/скрыта) для каждого пользователя или группы. Страницы могут объединяться в папки (folders) при необходимости.
Панель имеет верхнюю строку - заголовок. Заголовок может быть пустым, но строка при этом не убирается.
Панель может иметь многострочное описание. Его наличие отображается буквой "i" слева вверху, текст отображается всплывающим окном при наведении курсора.
Внутри страницы панели могут размещаться либо "как есть", либо в виде сворачиваемых рядов (rows).
Архитектура страницы по ширине является условно-адаптивной (фиксируется в % в момент визуального редактирования, при недостатке места в окне строка перестраивается в столбец). По высоте панель фиксируется в момент редактирования и больше не меняется, так что продумывайте потенциальный спектр устройств отображения. При нехватке по высоте на странице появится скроллбар.
Про простую панель с комментариями рассказывать особо не буду, ничего сложного там нет. Может использоваться Markdown (кстати, рекомендую!) или HTML, можно вставлять картинки, можно делать ссылки. А про динамические индикаторы расскажу в следующих выпусках.
Изучение секретов Grafana пролжим в следующей статье цикла, подписывайтесь на канал!
Следующая статья:
В следующих статьях:
- Отображение "величина - время"
- Табличное отображение
- Индикатор агрегированной величины
- Циферблат
- Отображение "структура - время"
- Отображение "структура за период"
- Использование фильтров на странице
- Отображение Sankey diagram