Настройка правил алертинга в Grafana

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

Увеличить

Шаблоны аннотаций и меток

Аннотации и метки в правилах оповещений могут быть определены с использованием обычного текста. Также возможно определить шаблоны для настройки их значений динамическими данными из запросов правил оповещений.
Например, можно задать шаблон для аннотации "summary", включив информацию из значений запроса, предоставляя релевантный контекст оповещения для ответственных лиц.
В шаблонах переменные представляют динамические значения из запросов, а функции выполняют действия для преобразования или форматирования этих данных.

Переменные ($values)

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

Метки ($labels)

Переменная $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

Функции (Function)

Функции могут выполнять такие действия в шаблонах, как преобразование или форматирование данных. Доступны функции, предоставляемые языком шаблонов Go, такие как index, and, printf и len.
Функции, указанные в таблице ниже, также доступны для создания шаблонов аннотаций и меток:
НаименованиеЗапросОтветОписание
humanize
number or stringstringПриводит десятичные числа к удобному для чтения виду
humanize1024
number or stringstringАналогично humanize, но использует 1024 вместо 1000 в качестве основания
humanizeDuration
number or stringstringПреобразует длительность в секундах в удобный для чтения вид
humanizePercentage
number or stringstringПредставляет отношение в виде удобного для чтения процента
humanizeTimestamp
number or stringstringПревращает временную метку Unix в удобный для чтения формат
toTime
number or stringtimeПреобразует временную метку Unix (в секундах) во время
title
stringstringПриводит первую букву каждого слова к верхнему регистру
toUpper
stringstringПриводит весь текст в верхнем регистре
toLower
stringstringПриводит весь текст в нижнем регистре
stripPort
stringstringВозвращает только хост
match
pattern, textbooleanСопоставляет текст с шаблоном регулярного выражения
reReplaceAll
pattern, replacement, textstringЗаменяет текст, соответствующий регулярному выражению
graphLink
exprstringВозвращает путь к графическому представлению в Explore для данного выражения и источника данных
tableLink
exprstringВозвращает путь к табличному представлению в Explore для данного выражения и источника данных
parseDuration
stringfloatПреобразует строку длительности, такую как "1 ч.", в количество секунд, которое она представляет
stripDomain
stringstringВозвращает результат удаления домена из полного доменного имени (FQDN)
args
[]interface{}map[string]interface{}Преобразует список объектов в карту с ключами arg0, arg1 и т.д.
safeHtml
stringstringПомечает строку как HTML, не требующий автоматического экранирования
externalURL
nonestringВозвращает внешний URL-сервера Grafana, настроенный в файле (файлах) ini
pathPrefix
nonestringВозвращает путь сервера 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
Предыдущий раздел
Алертинг
Следующий раздел
Хранилище адресов виртуальных машин
Была ли страница полезной?