Example of alerting on tabular data

Не все источники данных возвращают временные ряды. Базы данных SQL, файлы CSV и некоторые API часто возвращают результаты в виде строк или массивов столбцов или полей — обычно это называют табличными данными.

Этот пример показывает, как создать правило оповещения, используя данные в табличном формате. Grafana трактует каждую строку как отдельный экземпляр оповещения, если данные соответствуют ожидаемому формату.

How Grafana Alerting evaluates tabular data

Когда запрос возвращает данные в табличном формате, Grafana преобразует каждую строку в отдельный экземпляр оповещения.

Для оценки каждой строки (экземпляра оповещения) он ожидает:

  1. Только один числовой столбец. Это значение, используемое для оценки условия оповещения.
  2. Нечисловые столбцы. Эти столбцы определяют набор меток. Имя столбца становится именем метки, а значение ячейки становится значением метки.
  3. Уникальные наборы меток для каждой строки. Каждая строка должна однозначно идентифицироваться по своим меткам. Это гарантирует, что каждая строка представляет отдельный экземпляр оповещения.

Caution

Эти три условия должны быть выполнены — в противном случае Grafana не сможет оценить табличные данные, и правило завершится с ошибкой.

Example overview

Представьте, что вы храните использование дискового пространства в таблице DiskSpace и хотите вызывать оповещения, когда свободное место опускается ниже 5 %.

Время Host Disk PercentFree
2021-06-07 web1 /etc 3
2021-06-07 web2 /var 4
2021-06-07 web3 /var 8

Чтобы вычислить свободное место по каждому Host и Disk в этом случае, вы можете использовать $__timeFilter, чтобы фильтровать по времени, но не возвращать дату в Grafana:

SQL
SELECT
  Host,
  Disk,
  AVG(PercentFree) AS PercentFree
FROM DiskSpace
WHERE $__timeFilter(Time)
GROUP BY Host, Disk

Этот запрос возвращает следующий табличный ответ:

Host Disk PercentFree
web1 /etc 3
web2 /var 4
web3 /var 8

Когда Alerting оценивает ответ запроса, данные преобразуются в три экземпляра оповещений, как описано ранее:

  • Числовой столбец становится значением для условия оповещения.
  • Дополнительные столбцы определяют набор меток для каждого экземпляра оповещения.
Экземпляр оповещения Значение
{Host="web1", Disk="/etc"} 3
{Host="web2", Disk="/var"} 4
{Host="web3", Disk="/var"} 8

Наконец, условие оповещения, проверяющее менее 5 % свободного места ($A < 5), привело бы к срабатыванию двух экземпляров оповещения:

Экземпляр оповещения Значение Состояние
{Host="web1", Disk="/etc"} 3 Firing
{Host="web2", Disk="/var"} 4 Firing
{Host="web3", Disk="/var"} 8 Normal

Try it with TestData

Чтобы быстро это протестировать, вы можете имитировать таблицу с помощью источника данных TestData:

  1. Добавьте источник данных TestData через меню Connections.

  2. Перейдите в Alerting и создайте правило оповещения.

  3. Выберите TestData в качестве источника данных.

  4. В поле Scenario выберите CSV Content и вставьте этот CSV:

    Bash
    host, disk, percentFree
    web1, /etc, 3
    web2, /var, 4
    web3, /var, 8
  5. Задайте условие, например $A < 5, и нажмите Preview, чтобы просмотреть оповещение.

    Grafana оценивает табличные данные и вызывает срабатывание первых двух экземпляров оповещений.

    Alert preview with tabular data using the TestData data source

    Tip

    Вы можете изучить этот пример оповещений в Grafana Play.

    Откройте пример, чтобы увидеть результаты оценки оповещений, созданные экземпляры оповещений, временную шкалу истории оповещений и сведения о правилах оповещения.

CSV data with Infinity

Обратите внимание, что когда плагин Infinity получает данные CSV, все столбцы разбираются и возвращаются как строки. По умолчанию это приводит к сбою выражения запроса в Alerting.

Чтобы это работало, вам нужно отформатировать данные CSV так, как ожидает Grafana Alerting.

В редакторе запросов укажите имена столбцов и их типы, чтобы только один столбец трактовался как число.

Using the Infinity data source plugin to fetch CSV data in Alerting

Differences with time series data

Работа с временными рядами похожа — каждая серия трактуется как отдельный экземпляр оповещения на основе её набора меток.

Ключевое отличие — в формате данных:

  • Данные временных рядов содержат несколько значений во времени, каждое со своей временной меткой. Для оценки условия оповещения правила оповещения должны свести каждый ряд к одному числу, используя функцию, например last(), avg() или max().
  • Табличные данные не требуют сведения, так как каждая строка содержит только одно числовое значение, используемое для оценки условия оповещения.

Для сравнения см. пример многомерных данных временных рядов.