Этот репозиторий был заархивирован в пользу встроенных плагинов, доступных в версиях Grafana 9+: история состояния и временная шкала состояния. Эти плагины используются сообществом в качестве замены flant-statusmap, дополнительную информацию см. в выпуске №302. Если вы считаете, что этот плагин соответствует вашим потребностям и хотели бы продолжить его разработку, смело делайте форк. Нам бы очень хотелось, чтобы вы пошли дальше!
Панель для отображения дискретных статусов нескольких целей с течением времени.
Запустите
docker compose up
и откройте http://localhost:3000 в браузере, чтобы увидеть простую демонстрацию.
У нас была отчаянная необходимость визуализировать набор статусов временных рядов за период времени, чтобы мы могли видеть историю изменений статуса объектов. Поскольку мы поддерживаем множество кластеров Kubernetes (и связанной с ними инфраструктуры), нашими основными задачами для этого являются визуализация состояний работоспособности серверов и модулей Kubernetes, а также проверки работоспособности HTTP-сервисов. Мы опробовали множество доступных плагинов Grafana (они перечислены в разделе «Благодарности» ниже), но ни один из них не смог предоставить функции и визуализацию, действительно близкие к тому, что мы искали.
Примечание: Более подробную информацию о нашем пути создания плагина вы можете найти в этом посте.
Объекты, визуализируемые с помощью этого плагина, могут быть разными: не только ИТ-компоненты (например, хосты серверов и модули Kubernetes), но и все, что вы можете себе представить, например, кофеварки на картинке выше. Эти объекты должны иметь дискретные статусы , которые представляют собой наборы заранее определенных значений, например, ok
= 0, off
= 1, fail
= 2 и т. д.
Для создания аккуратных графиков ваш источник данных должен возвращать хорошие данные. Плагин настраивает переменную $__interval
в зависимости от ширины сегмента в настройках панели. Ваши запросы должны агрегировать статусы за $__interval
.
Чтобы режим нескольких значений работал должным образом, вам следует определить несколько запросов: по одному запросу для каждого возможного статуса.
На данный момент плагин не агрегирует данные вовремя, он только отображает входные данные в виде сегментов. По этой причине данные должны содержать точки для каждой временной метки во временном диапазоне и равные временные метки для каждой возможной цели (метка оси Y). Это ограничение устранено в проблеме №53.
Для работы с данными из Прометея вам потребуется настроить дискретные статусы для ваших объектов. Требования к хранению этих статусов в метриках следующие:
0
и 1
;Когда это будет сделано, вы можете собрать все данные с помощью запроса, например:
(max_over_time(coffee_maker_status{status=""}[$__interval]) == 1) *
Если бы такого статуса (
) не было в течение интервала запроса, 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
Теперь, когда у Прометея для каждого статуса есть значения 0
и 1
, все эти метрики можно агрегировать, так что вы со временем получите все доступные статусы ваших объектов.
Выберите «Временные ряды» для «Форматировать как» и используйте в запросе GROUP BY ($__interval)
. $tag_
можно использовать в «Псевдониме» для определения меток оси 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.
Флажок «Множественные значения» определяет, как они должны отображаться:
Отображаемые нули можно рассматривать как пустые сегменты или отображать цветом значения 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
плюс процентное значение сегмента.
Первый публичный релиз этого плагина был полностью сделан инженерами Flant. Вся идея принадлежит Дмитрию Столярову (@distol), первоначальную версию написал Сергей Гнусков (@gsmetal), а окончательные изменения внес Иван Михейкин (@diafour).
Этот плагин основан на панели «Тепловая карта» от Grafana и частично вдохновлен идеями Carpet Plot, Discrete Panel, Status Panel, Status Dot, Status By Group.