Этот репозиторий был заархивирован в пользу встроенных плагинов, доступных в версиях Grafana 9+: история состояния и временная шкала состояния. Эти плагины используются сообществом в качестве замены flant-statusmap, дополнительную информацию см. в выпуске №302. Если вы считаете, что этот плагин соответствует вашим потребностям и хотели бы продолжить его разработку, смело делайте форк. Нам бы очень хотелось, чтобы вы пошли дальше!
Панель для отображения дискретных статусов нескольких целей с течением времени.
Запустите
docker compose up
и откройте http://localhost:3000 в браузере, чтобы увидеть простую демонстрацию.
Группировка значений в строки и сегменты с использованием легенды из запроса
Пользовательское цветовое сопоставление
Несколько значений в сегменте отображаются во всплывающей подсказке.
Настраиваемые элементы всплывающей подсказки
Пагинация для строк
Увеличение интервала строк/сегментов для лучшего визуального представления.
Представление нулевых значений в виде пустого сегмента или нулевого значения
Протестировано с:
Прометей
Инфлюксдб
MySQL
Графана 7.x, 8.x
Поддержка более ранних версий Grafana:
Версии 0.5.x должны работать в Grafana 6.5.x – 6.7.x с форматом данных таймсерий.
(0.4.2)[https://github.com/flant/grafana-statusmap/releases/tag/v0.4.2] должно работать в Grafana 5.4.x – 6.4.x
У нас была отчаянная необходимость визуализировать набор статусов временных рядов за период времени, чтобы мы могли видеть историю изменений статуса объектов. Поскольку мы поддерживаем множество кластеров Kubernetes (и связанной с ними инфраструктуры), нашими основными задачами для этого являются визуализация состояний работоспособности серверов и модулей Kubernetes, а также проверки работоспособности HTTP-сервисов. Мы опробовали множество доступных плагинов Grafana (они перечислены в разделе «Благодарности» ниже), но ни один из них не смог предоставить функции и визуализацию, действительно близкие к тому, что мы искали.
Примечание: Более подробную информацию о нашем пути создания плагина вы можете найти в этом посте.
Объекты, визуализируемые с помощью этого плагина, могут быть разными: не только ИТ-компоненты (например, хосты серверов и модули Kubernetes), но и все, что вы можете себе представить, например, кофеварки на картинке выше. Эти объекты должны иметь дискретные статусы , которые представляют собой наборы заранее определенных значений, например, ok
= 0, off
= 1, fail
= 2 и т. д.
Для создания аккуратных графиков ваш источник данных должен возвращать хорошие данные. Плагин настраивает переменную $__interval
в зависимости от ширины сегмента в настройках панели. Ваши запросы должны агрегировать статусы за $__interval
.
Чтобы режим нескольких значений работал должным образом, вам следует определить несколько запросов: по одному запросу для каждого возможного статуса.
На данный момент плагин не агрегирует данные вовремя, он только отображает входные данные в виде сегментов. По этой причине данные должны содержать точки для каждой временной метки во временном диапазоне и равные временные метки для каждой возможной цели (метка оси Y). Это ограничение устранено в проблеме №53.
Для работы с данными из Прометея вам потребуется настроить дискретные статусы для ваших объектов. Требования для хранения этих статусов в метриках следующие:
метрика должна иметь два значения: 0
и 1
;
должна быть метка со значением статуса.
Когда это будет сделано, вы можете собрать все данные с помощью запроса, например:
(max_over_time(coffee_maker_status{status="<STATUS_VALUE>"}[$__interval]) == 1) * <STATUS_VALUE>
Если бы такого статуса ( <STATUS_VALUE>
) не было в течение интервала запроса, Prometheus ничего не вернул бы. В противном случае будет возвращено значение статуса.
Например, если у вас есть 5 типов статусов и метрика ( coffee_maker_status
) с 5 разрешенными значениями ( 0
, 1
, 2
, 3
, 4
), вам следует преобразовать эту метрику, используя следующее правило:
- record: coffee_maker_status:discrete expr: | count_values("status", coffee_maker_status)
Вот как метрика coffee_maker_status
со значением 3
преобразуется в новую метрику:
coffee_maker_status:discrete{status="3"} 1
Теперь, когда у Prometheus для каждого статуса есть значения 0
и 1
, все эти метрики можно агрегировать, так что вы со временем получите все доступные статусы ваших объектов.
Выберите «Временные ряды» для «Форматировать как» и используйте GROUP BY ($__interval)
в запросе. $tag_<tag name>
можно использовать в «Псевдониме» для определения меток оси Y.
Пример запроса с агрегацией по $__interval
выглядит следующим образом (вам нужен один запрос для каждого возможного значения статуса):
SELECT $__timeGroupAlias(date_insert,$__interval), name AS metric, min(statusi) AS "statusi" FROM coffee_makers WHERE $__timeFilter(date_insert) AND statusi=1 GROUP BY 1,2 ORDER BY $__timeGroup(date_insert,$__interval)
Столбец metric
используется в качестве метки оси Y.
Прежде всего, необходимо создать отдельный запрос для каждого возможного значения статуса. Каждый запрос также должен иметь аналогичную легенду для группировки:
Затем необходимо определить цветовое отображение значений статуса в дискретном цветовом режиме:
Можно использовать пресеты для определения цветов светофора или 8 цветов из соляризованной палитры:
Примечание. Цветовые режимы «Спектр» и «Непрозрачность» работают так же, как и в плагине Heatmap.
Флажок «Множественные значения» определяет, как они должны отображаться:
Если он выключен, несколько значений для одного сегмента считаются ошибкой;
Если он включен, цвет для такого сегмента будет определяться значением, имеющим наименьший индекс в сопоставлении цветов.
Отображаемые значения NULL можно рассматривать как пустые сегменты или отображать цветом значения 0
.
Минимальная ширина и интервал используются для указания минимальной ширины сегмента и расстояния между сегментами. Закругление можно использовать для скругления краев.
Индекс значений установлен на положительное число, чтобы отображать только значения из указанного временного ряда.
Флажок «Показать легенду» включает отображение легенды в нижней части панели.
Сортировку строк можно использовать для сортировки меток по оси Y. Метрики — сортируйте метки так, как они определены на вкладке «Метрики». a→z и z→a сортируют метки по убыванию или возрастанию в естественном порядке.
Включить нумерацию страниц включает элементы управления нумерацией страниц на графике.
Строков на странице количество строк для отображения на графике.
Показать всплывающую подсказку переключает отображение всплывающей подсказки при наведении курсора мыши на сегменты.
Freeze on click переключает «замораживание» всплывающей подсказки при клике. Замороженную всплывающую подсказку можно использовать для сравнения данных с плавающей подсказкой или для перехода по URL-адресам.
Показать элементы включает отображение дополнительных элементов во всплывающей подсказке.
Items — это список определений для отображения URL-адресов во всплывающей подсказке.
Каждый URL-адрес имеет шаблон, значок, метку и параметры форматирования: строчные буквы и формат даты для переменных.
В некоторых случаях панель состояния используется для перехода от одной информационной панели к более конкретной, например, при выполнении анализа первопричин/причин. В таких случаях пользователь может захотеть сократить временной интервал, сохраняя при этом желаемое событие по центру (чтобы иметь возможность анализировать предыдущие/последующие периоды времени). Эти значения вводятся через __bucket_from
и __bucket_to
.
__bucket_from
: это значение bucket.from
минус процентное значение сегмента. __bucket_to
: это значение bucket.to
плюс процентное значение сегмента.
Журнал изменений
Используйте обсуждения GitHub, чтобы попросить о помощи.
Установка
Настройте среду разработки, чтобы помочь нам улучшить плагин.
Первый публичный релиз этого плагина был полностью сделан инженерами Flant. Вся идея принадлежит Дмитрию Столярову (@distol), первоначальную версию написал Сергей Гнусков (@gsmetal), а окончательные изменения внес Иван Михейкин (@diafour).
Этот плагин основан на панели «Тепловая карта» от Grafana и частично вдохновлен идеями Carpet Plot, Discrete Panel, Status Panel, Status Dot, Status By Group.