Запросы и условия
В Grafana запросы извлекают и преобразуют данные из источников данных, которые включают базы данных, такие как MySQL или PostgreSQL, базы данных временных рядов, такие как Prometheus или InfluxDB, и сервисы, такие как Amazon CloudWatch или Azure Monitor.
Правило оповещения определяет следующие компоненты:
- Запрос, задающий данные для извлечения из источника данных, синтаксис которого зависит от типа используемого источника данных.
- Условие, которое должно быть выполнено до срабатывания правила оповещения.
- Необязательные выражения для выполнения преобразований над извлечёнными данными.
Оповещения периодически запускают запросы и выражения, вычисляя условие. Если условие нарушено, для каждого временного ряда запускается экземпляр оповещения.
Запросы к источникам данных
Запросы оповещений такие же, как запросы, используемые на панелях Grafana, но Grafana-managed оповещения ограничены запросами к источникам данных с включёнными оповещениями.
Запросы в Grafana можно применять разными способами в зависимости от используемого источника данных и языка запросов. Редактор запросов каждого источника данных предоставляет настроенный интерфейс, помогающий писать запросы, использующие его уникальные возможности. Подробнее о редакторах запросов и синтаксисе в Grafana см. в разделе Запрос и преобразование данных.
Оповещения могут работать с двумя типами данных:
- Данные временных рядов — запрос возвращает набор временных рядов, где каждый ряд должен быть приведён к одному числовому значению для вычисления условия оповещения.
- Табличные данные — запрос должен возвращать данные в табличном формате только с одним числовым столбцом. Каждая строка должна иметь значение в этом столбце, используемое для вычисления условия оповещения. См. пример табличных данных.
Каждый временной ряд или строка таблицы вычисляется как отдельный экземпляр оповещения.
Условие оповещения
Условие оповещения — это запрос или выражение, определяющее, сработает ли оповещение, в зависимости от того, удовлетворяет ли значение заданному сравнению. Может быть только одно условие, определяющее запуск оповещения.
Если данные запроса удовлетворяют заданному условию, Grafana запускает оповещение.
При использовании Default options поле When приводит данные запроса, а последнее поле определяет условие порога.
При использовании Advanced options вы должны выбрать один из своих запросов или выражений в качестве условия оповещения.
Расширенные параметры: выражения
Выражения доступны только для Grafana-managed оповещений и при включённых Advanced options.
В Grafana выражения позволяют выполнять вычисления, преобразования или агрегации над данными запросов. Они изменяют существующие метрики с помощью математических операций, функций или логических выражений.
С помощью выражений-запросов вы можете выполнять такие задачи, как вычисление процентного изменения между двумя значениями, применение функций вроде логарифмических или тригонометрических, агрегация данных за определённые временные диапазоны или измерения, а также реализация условной логики для обработки разных сценариев.
Доступны следующие выражения:
Reduce
Агрегирует значения временных рядов в выбранном временном диапазоне в одно число.
Reduce принимает один или несколько временных рядов и преобразует каждый ряд в одно число, которое затем можно сравнивать в условии оповещения.
Включены следующие функции агрегации: Min, Max, Mean, Median, Sum, Count и Last. Подробнее см. в
документации по Reduce.
Math
Выполняет произвольные математические функции/операции над данными временных рядов и числами. Например, $A + 1 или $A * 100.
Если у сравниваемых запросов в результатах несколько рядов, ряды из разных запросов сопоставляются (объединяются), если у них одинаковые метки. Например:
$Areturns series{host="web01"} 30and{host="web02"} 20.$Breturns series{host="web01"} 10and{host="web02"} 0.$A + $Breturns{host="web01"} 40and{host="web02"} 20.
В этом случае объединяются только ряды с совпадающими метками, и операция вычисляется между ними.
Дополнительные сценарии обработки разных типов данных функцией Math см. в документации по Math.
Вы также можете использовать выражение Math для определения условия оповещения. Например:
$B > 70должно сработать, если значение B (запроса или выражения) больше 70.$B < $C * 100должно сработать, если значение B меньше значения C, умноженного на 100.- Сравнение совпадающих рядов из двух запросов, как показано в примере динамического порога.
Resample
Перестраивает временной диапазон к новому набору меток времени; это полезно при сравнении данных временных рядов из разных источников данных, где в противном случае метки времени не совпадали бы.
Подробнее см. в документации по Resample.
SQL
Преобразует результаты предыдущих запросов или выражений с использованием синтаксиса, похожего на MySQL, что полезно для фильтрации строк, объединения данных из нескольких запросов и агрегации результатов до вычисления условия оповещения.
Подробнее см. в документации по выражениям SQL.
Threshold
Сравнивает отдельные числа из предыдущих запросов или выражений (например, $A, $B) с заданным условием. Часто используется для определения условия оповещения.
Выражение threshold позволяет сравнивать два отдельных значения. Доступны следующие функции порога:
- Is above:
$A > 5 - Is below:
$B < 3 - Is equal to:
$A == 2 - Is not equal to:
$B =! 4 - Is above or equal to:
$A >= 8 - Is below or equal to:
$B <= 16 - Is within range:
$A > 0 AND $A < 10 - Is outside range:
$B < 0 OR $B > 100 - Is within range included:
$A >= 0 AND $A <= 10 - Is outside range included:
$B <= 0 OR $B >= 100
Порог возвращает 0, когда условие ложно, и 1, когда истинно.
Если порог задан как условие оповещения, оповещение срабатывает, когда порог возвращает 1.
Порог восстановления
Чтобы снизить шум от колеблющихся оповещений, вы можете задать порог восстановления, чтобы оповещение возвращалось в состояние Normal или Recovering только после пересечения порога восстановления.
Колеблющиеся оповещения возникают, когда значение запроса многократно поднимается выше и опускается ниже порога оповещения, вызывая частые изменения состояния. Это приводит к серии уведомлений firing-resolved-firing и шумной истории состояний оповещений.
Например, если у вас есть оповещение о задержке с порогом 1000ms и значение колеблется вокруг 1000 (скажем, 980 -> 1010 -> 990 -> 1020 и так далее), то каждое из этих изменений может запустить уведомление:
- 980 -> 1010 запускает срабатывающее оповещение.
- 1010 -> 990 запускает разрешающее оповещение.
- 990 -> 1020 снова запускает срабатывающее оповещение.
Чтобы предотвратить это, вы можете задать порог восстановления, определяющий два порога вместо одного:
- Оповещение переходит в состояние
PendingилиAlerting, когда пересекает порог оповещения. - Затем оно переходит в состояние
RecoveringилиNormalтолько когда пересекает порог восстановления.
В предыдущем примере установка порога восстановления в 900ms означает, что оповещение разрешается только когда задержка опускается ниже 900ms:
- 980 -> 1010 запускает срабатывающее оповещение.
- 1010 -> 990 не разрешает оповещение, оставляя его в состоянии срабатывания.
- 990 -> 1020 оставляет оповещение в состоянии срабатывания.
Порог восстановления смягчает ненужные изменения состояния оповещений и снижает шум от оповещений.
Classic condition (legacy)
Classic conditions существуют в основном по причинам совместимости и по возможности их следует избегать.
Classic condition проверяет, соответствуют ли какие-либо данные временных рядов условию оповещения. Она всегда создаёт только один экземпляр оповещения, независимо от того, сколько временных рядов удовлетворяют условию.
Для дальнейшего уточнения запроса также доступны следующие функции агрегации.