Настройка правил алертинга в Grafana
Правило алертинга (оповещения) в Grafana позволяет настроить автоматическое уведомление о событиях, которые происходят с вашими метриками и данными. Это помогает оперативно реагировать на изменения в системе, такие как превышение определённых пороговых значений, падение сервисов или другие аномалии.
Каждое правило оповещения может создавать несколько экземпляров оповещений (алертов) — по одному алерту для каждой временной серии. Эта функция позволяет наблюдать множество серий в одном выражении.
Правило, использующее приведенное ниже выражение PromQL, создаёт столько же алертов, сколько имеется CPU (процессоров) после первой оценки, позволяя одному правилу сообщать о состоянии каждого процессора.
sum by(cpu) ( rate(node_cpu_seconds_total{mode!="idle"}[1m]) )
Ниже приведён пример нескольких алертов от одного правила оповещения.

Увеличить
Аннотации и метки в правилах оповещений могут быть определены с использованием обычного текста. Также возможно определить шаблоны для настройки их значений динамическими данными из запросов правил оповещений.
Например, можно задать шаблон для аннотации "summary", включив информацию из значений запроса, предоставляя релевантный контекст оповещения для ответственных лиц.
В шаблонах переменные представляют динамические значения из запросов, а функции выполняют действия для преобразования или форматирования этих данных.
Переменные представляют собой динамические значения из запросов правил оповещений, которые могут отображаться или использоваться в шаблонах.
Символы
$
и .
используются для ссылки на переменные и их свойства. Можно ссылаться на переменные непосредственно в определениях правил оповещения, используя символ $
, за которым следует имя переменной. Также можно получить доступ к свойствам переменных, используя нотацию с точкой (.
) в шаблоне правила оповещения.{{ $values.A.Value }}
Шаблоны основаны на системе шаблонов Go.
Следующие переменные доступны при создании шаблонов аннотаций и меток:
Переменная | Описание |
---|---|
$labels | Содержит все метки из запроса |
$value | Содержит метки и значения всех мгновенных запросов, пороговых выражений, операций свёртки и математических выражений, а также классических условий в правиле оповещения |
$values | Содержит метки и числовые значения всех мгновенных запросов и выражений, индексированные по их идентификаторам Ref ID |
Переменная
$labels
содержит все метки из запроса.Ниже отображено правило оповещения, отображающее метки и значение из запроса.

Увеличить
Предположим, что есть запрос, который возвращает использование ЦПУ для всех серверов, и есть правило оповещения, которое срабатывает, когда любой из серверов превысил значение 80% использования ЦПУ за последние 5 минут. Добавим краткую аннотацию к оповещению о том, какой именно сервер осуществляет высокую нагрузку на процессор. С помощью переменной
$labels
можно написать соответствующий шаблон.CPU usage for {{ $labels.instance }} has exceeded 80% for the last 5 minutes
Результат работы этого шаблона:
CPU usage for server1 has exceeded 80% for the last 5 minutes
Функции могут выполнять такие действия в шаблонах, как преобразование или форматирование данных. Доступны функции, предоставляемые языком шаблонов Go, такие как
index
, and
, printf
и len
.Функции, указанные в таблице ниже, также доступны для создания шаблонов аннотаций и меток:
Наименование | Запрос | Ответ | Описание |
---|---|---|---|
humanize | number or string | string | Приводит десятичные числа к удобному для чтения виду |
humanize1024 | number or string | string | Аналогично humanize , но использует 1024 вместо 1000 в качестве основания |
humanizeDuration | number or string | string | Преобразует длительность в секундах в удобный для чтения вид |
humanizePercentage | number or string | string | Представляет отношение в виде удобного для чтения процента |
humanizeTimestamp | number or string | string | Превращает временную метку Unix в удобный для чтения формат |
toTime | number or string | time | Преобразует временную метку Unix (в секундах) во время |
title | string | string | Приводит первую букву каждого слова к верхнему регистру |
toUpper | string | string | Приводит весь текст в верхнем регистре |
toLower | string | string | Приводит весь текст в нижнем регистре |
stripPort | string | string | Возвращает только хост |
match | pattern, text | boolean | Сопоставляет текст с шаблоном регулярного выражения |
reReplaceAll | pattern, replacement, text | string | Заменяет текст, соответствующий регулярному выражению |
graphLink | expr | string | Возвращает путь к графическому представлению в Explore для данного выражения и источника данных |
tableLink | expr | string | Возвращает путь к табличному представлению в Explore для данного выражения и источника данных |
parseDuration | string | float | Преобразует строку длительности, такую как "1 ч.", в количество секунд, которое она представляет |
stripDomain | string | string | Возвращает результат удаления домена из полного доменного имени (FQDN) |
args | []interface{} | map[string]interface{} | Преобразует список объектов в карту с ключами arg0, arg1 и т.д. |
safeHtml | string | string | Помечает строку как HTML, не требующий автоматического экранирования |
externalURL | none | string | Возвращает внешний URL-сервера Grafana, настроенный в файле (файлах) ini |
pathPrefix | none | string | Возвращает путь сервера Grafana, установленный в файлах ini |
Аннотации добавляют дополнительные детали к алертам и часто используются для предоставления полезной информации, помогающей идентифицировать проблему и корректно среагировать на неё. Примером использования аннотаций является отображение конкретного значения запроса или порога, вызвавшего оповещение. Можно отобразить значение запроса из переменной
$values
, чтобы сообщить о значении ЦПУ, которое вызвало оповещение.CPU usage has exceeded 80% ({{ $values.A.value }}) for the last 5 minutes
Альтернативный способ: использовать функцию
index()
для получения значения запроса следующим образом.CPU usage has exceeded 80% ({{ index $values "A" }}) for the last 5 minutes
Результат:
CPU usage has exceeded 80% (81.2345) for the last 5 minutes
Дополнительные детали в виде меток
Для предоставления дополнительного контекста можно включить метки из запроса. Например: используется переменная
$labels
для отображения метки, информирующей о затронутом экземпляре.CPU usage for {{ $labels.instance }} has exceeded 80% ({{ $values.A.Value }}) for the last 5 minutes
Результат:
CPU usage for Instance 1 has exceeded 80% (81.2345) for the last 5 minutes
Аннотации также могут использоваться для предоставления сводки ключевых меток оповещения, таких как окружение и серьезность оповещения. Например, возможно отобразить сводку оповещения с важными метками, такими как:
Alert triggered in {{ $labels.environment }} with severity {{ $labels.severity }}
Результат:
Alert triggered in production with severity critical
В демопримерах реализованы стандартные сценарии, демонстрирующие работу отдельных сервисов Платформы ГосТех. Отправка тестовых запросов в демопримерах позволит вам ознакомиться с функциями того или иного сервиса. Доступные демопримеры и описания реализованной в них функциональности представлены ниже.
Мониторинг
Генерация метрик, их получение и просмотр в Grafana