Example of alerting on tabular data
Не все источники данных возвращают временные ряды. Базы данных SQL, файлы CSV и некоторые API часто возвращают результаты в виде строк или массивов столбцов или полей — обычно это называют табличными данными.
Этот пример показывает, как создать правило оповещения, используя данные в табличном формате. Grafana трактует каждую строку как отдельный экземпляр оповещения, если данные соответствуют ожидаемому формату.
How Grafana Alerting evaluates tabular data
Когда запрос возвращает данные в табличном формате, Grafana преобразует каждую строку в отдельный экземпляр оповещения.
Для оценки каждой строки (экземпляра оповещения) он ожидает:
- Только один числовой столбец. Это значение, используемое для оценки условия оповещения.
- Нечисловые столбцы. Эти столбцы определяют набор меток. Имя столбца становится именем метки, а значение ячейки становится значением метки.
- Уникальные наборы меток для каждой строки. Каждая строка должна однозначно идентифицироваться по своим меткам. Это гарантирует, что каждая строка представляет отдельный экземпляр оповещения.
Caution
Эти три условия должны быть выполнены — в противном случае Grafana не сможет оценить табличные данные, и правило завершится с ошибкой.
Example overview
Представьте, что вы храните использование дискового пространства в таблице DiskSpace и хотите вызывать оповещения, когда свободное место опускается ниже 5 %.
Чтобы вычислить свободное место по каждому Host и Disk в этом случае, вы можете использовать $__timeFilter, чтобы фильтровать по времени, но не возвращать дату в Grafana:
SELECT
Host,
Disk,
AVG(PercentFree) AS PercentFree
FROM DiskSpace
WHERE $__timeFilter(Time)
GROUP BY Host, Disk
Этот запрос возвращает следующий табличный ответ:
Когда Alerting оценивает ответ запроса, данные преобразуются в три экземпляра оповещений, как описано ранее:
- Числовой столбец становится значением для условия оповещения.
- Дополнительные столбцы определяют набор меток для каждого экземпляра оповещения.
Наконец, условие оповещения, проверяющее менее 5 % свободного места ($A < 5), привело бы к срабатыванию двух экземпляров оповещения:
Try it with TestData
Чтобы быстро это протестировать, вы можете имитировать таблицу с помощью источника данных TestData:
-
Добавьте источник данных TestData через меню Connections.
-
Перейдите в Alerting и создайте правило оповещения.
-
Выберите TestData в качестве источника данных.
-
В поле Scenario выберите CSV Content и вставьте этот CSV:
host, disk, percentFree web1, /etc, 3 web2, /var, 4 web3, /var, 8 -
Задайте условие, например
$A < 5, и нажмите Preview, чтобы просмотреть оповещение.Grafana оценивает табличные данные и вызывает срабатывание первых двух экземпляров оповещений.
Tip
Вы можете изучить этот пример оповещений в Grafana Play.
Откройте пример, чтобы увидеть результаты оценки оповещений, созданные экземпляры оповещений, временную шкалу истории оповещений и сведения о правилах оповещения.
CSV data with Infinity
Обратите внимание, что когда плагин Infinity получает данные CSV, все столбцы разбираются и возвращаются как строки. По умолчанию это приводит к сбою выражения запроса в Alerting.
Чтобы это работало, вам нужно отформатировать данные CSV так, как ожидает Grafana Alerting.
В редакторе запросов укажите имена столбцов и их типы, чтобы только один столбец трактовался как число.
Differences with time series data
Работа с временными рядами похожа — каждая серия трактуется как отдельный экземпляр оповещения на основе её набора меток.
Ключевое отличие — в формате данных:
- Данные временных рядов содержат несколько значений во времени, каждое со своей временной меткой.
Для оценки условия оповещения правила оповещения должны свести каждый ряд к одному числу, используя функцию, например
last(),avg()илиmax(). - Табличные данные не требуют сведения, так как каждая строка содержит только одно числовое значение, используемое для оценки условия оповещения.
Для сравнения см. пример многомерных данных временных рядов.