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

vmalert, Alertmanager, группы правил, каналы уведомлений.

Обзор

Алертинг (оповещения) в платформе «Штурвал» реализован на основе VictoriaMetrics AlertManager и AlertManagerConfig. Графический интерфейс доработан так, чтобы минимизировать риск ошибок при конфигурации. Используются компоненты:

  • vmalert (VM Alert) — оценка правил алертинга на основе метрик;
  • Alertmanager — маршрутизация и доставка уведомлений.

По умолчанию в кластерах установлены правила оповещений (см. предустановленные правила). Для кастомных правил оповещения (alert) или записи (record) создайте группу правил.

По умолчанию оповещения отображаются в интерфейсе платформы. Для отправки в Email, Telegram, Webhook и др. в интерфейсе настраивают:

  • блокировку оповещений (inhibit);
  • временные интервалы оповещений;
  • маршруты;
  • получателей.

Просмотр сработавших оповещений — на странице ОповещенияПросмотр оповещений (см. раздел ниже).


Условия работы алертинга

Клиентский кластер

Алертинг клиентского кластера доступен из интерфейса платформы, если включены и работают сервисы:

Кластер управления

Алертинг кластера управления можно настроить, если включены и работают сервисы:


Просмотр оповещений

Раздел Оповещения → страница Просмотр оповещений доступен просмотр оповещений по сработавшим правилам.

Интерфейс оповещений

Скриншот интерфейса: Интерфейс оповещений

Оповещения разбиты по вкладкам:

Статус Описание
Firing Алерт срабатывает — актуальное нарушение условия или событие.
Pending Алерт не срабатывает, но возможен в будущем (временные изменения).
Inactive Алерт не срабатывает длительное время или отключён администратором.

На каждой вкладке алерты разбиты по группам в соответствии с заданным выражением. В каждой группе указаны выражение, описание условий срабатывания, счётчик событий в группе и сами алерты.

Состав алерта:

  • идентификатор;
  • название;
  • дата и время срабатывания;
  • описание;
  • выражения;
  • критичность.

Предустановленные правила

В кластерах по умолчанию установлены правила оповещений (VMRule с постфиксом system). Перечень правил приведен:

  • в кластере управления: АдминистрированиеКастомные ресурсы → API-группа operator.victoriametrics.com → ресурс VMRule с постфиксом system в неймспейсе с именем кластера (клиенсткого, управления) в кластере управления;
  • в документации: полный перечень предустановленных правил.

Группы правил оповещения

Для кастомных правил создаётся группа правил.

  1. Правила оповещения+ Добавить группу правил.
Скриншоты: группы правил оповещения

Группы правил

  1. Заполните:
    • Имя группы (обязательно);
    • Тип выражений — Prometheus или Graphite (по умолчанию Prometheus);
    • Тип правил — оповещения (alert) или запись (record);
    • как часто оцениваются правила;
    • сколько правил выполняются одновременно в группе.
Скриншот: добавление группы правил

Скриншот интерфейса: Скриншот: добавление группы правил

После создания имя группы, тип выражений и тип правил неизменяемы. Удаление группы приводит к каскадному удалению правил.


Как управлять правилами в группе

Когда создана группа правил оповещения, на странице просмотра группы можно управлять правилами. В нижней части страницы слева — список добавленных правил. Создайте правило, нажав + в списке; добавление и просмотр правила отображаются справа.

Правила бывают типа оповещение (alert) или запись (record):

  • Правила оповещения — условия на основе выражений Prometheus или Graphite (в зависимости от типа выражений группы) и уведомления при срабатывании.
  • Правила записи — предварительный расчёт часто используемых или ресурсоёмких выражений с сохранением результата как нового набора временных рядов; запрос к предвычисленному результату обычно быстрее повторного выполнения исходного выражения. Особенно полезно для дашбордов с повторяющимися запросами при каждом обновлении.

Правила оповещения (alert)

Скриншот: правило оповещения

Скриншот: Правила оповещения (alert)

Поле Описание
Название Обязательное. После создания не изменяется.
Время ожидания Лаг перед отправкой: система ждёт, сохранится ли состояние по выражению; если да — оповещение отправляется.
Критичность Записывается в лейбл severity. Если подходящего уровня нет — оставьте Не выбрано и задайте критичность лейблом (значение поля не перезаписывает лейбл).
Ссылка на решение Аннотация runbook_url.
Короткое описание Аннотация summary.
Описание Аннотация description.
Выражение Обязательное. Prometheus (PromQL) или Graphite — по типу выражений группы.
Лейблы, аннотации Дополнительные метаданные.

Уровни критичности:

  • Не выбрано (по умолчанию; можно использовать вместе с лейблом severity, заданным вручную)
  • Авария (Emergency) — система недоступна для использования
  • Тревога (Alert) — требуется немедленная реакция
  • Опасность (Critical) — критическое состояние
  • Ошибка (Error) — состояние ошибки
  • Предупреждение (Warning) — состояние может привести к сбою
  • Уведомление (Notice) — в пределах нормы, но стоит обратить внимание
  • Инфо (Info) — информационное сообщение
  • Отладка (Debug) — сообщение для отладки

Обратите внимание! Если в правиле есть аннотации с ключами description, summary или runbook_url, они перезаписываются значениями из полей формы.

На созданном правиле доступны кнопки Сохранить и Удалить правило.

По умолчанию оповещения маршрутизируются в кластер мониторинга VictoriaMetrics в кластере управления. Сработавшие оповещения отображаются в интерфейсе кластера в разделе ОповещенияПросмотр оповещений.

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

Пример правила оповещения

Для проверки создайте правило, срабатывающее при создании нового Pod в кластере Kubernetes. В разделе Правила оповещения создайте группу с типом правил оповещения (alert) и добавьте правило:

sum by(namespace, pod) (increase(kube_pod_created[5m])) > 0

Как работает выражение:

  • kube_pod_created — время создания каждого Pod (Unix timestamp)
  • increase(...[5m]) — число новых значений за последние 5 минут
  • sum by(namespace, pod) — группировка по namespace и имени Pod
  • > 0 — создан хотя бы один новый Pod

Для удобства добавьте:

  • короткое описание: "New pod created in {{ $labels.namespace }}" (см. скриншот ниже)
  • описание: "Pod {{ $labels.pod }} was created in namespace {{ $labels.namespace }}" (см. скриншот ниже)

Итоговый вид правила (см. скриншот ниже):

Пример правила оповещения с выражением PromQL и аннотациями

Форма правила оповещения с выражением, summary и description

Правила записи (record)

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

Скриншот: правило записи

Скриншот: Правила записи (record)

Поле Описание
Название Обязательное. После создания не изменяется.
Выражение Обязательное. Prometheus (PromQL) или Graphite — по типу выражений группы.
Лейблы Дополнительные метаданные.

На созданном правиле доступны кнопки Сохранить и Удалить правило.


Получатели (receivers)

По умолчанию оповещения маршрутизируются в кластер мониторинга VictoriaMetrics в кластере управления. Сработавшие оповещения отображаются в интерфейсе кластера в разделе ОповещенияПросмотр оповещений.

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

Страница ОповещенияПолучатели — таблица с полями:

  • Имя получателя (есть фильтрация по имени);
  • Тип — выбор из списка: default, webhook, email, telegram.

На странице можно добавить нового получателя или удалить ранее созданного.

Получатель devnull (тип default) создаётся по умолчанию, блокирует отправку оповещений; его нельзя удалить или изменить. При добавлении нового получателя тип default недоступен для выбора.

При создании получателя укажите:

  • Имя получателя (обязательное поле);
  • Тип получателя: webhook, email или telegram.

В зависимости от типа набор полей конфигурации разный. Подробнее по типам:

Сводка полей по типам (для быстрой настройки в одном месте):

Получатели оповещений

Получатели

Тип Назначение
webhook Отправка в сервисы агрегации, service-desk, task-manager. Обязательно: URL-адрес.
email SMTP. Обязательно: SMTP сервер, e-mail получателя. Gmail требует авторизацию.
telegram Telegram-бот. Токен бота (от @BotFather), идентификатор чата.

Маршруты (routes)

Все маршруты формируются в одном конфигурационном файле. Первым заполняется корневой маршрут, далее настраиваются подмаршруты.

Маршруты задают, куда и при каких условиях отправлять оповещения.

Скриншот: маршруты

Скриншот интерфейса: Скриншот: маршруты

Параметры маршрута:

Параметр Описание
Получатель Выбор из списка получателей. По умолчанию выбран дефолтный получатель.
Время ожидания до отправки первичных оповещений по группе Временной лаг до первоначальной отправки; может отбрасывать ложные срабатывания.
Время ожидания до отправки обновлённых оповещений по группе Лаг до отправки изменений по ранее отправленному оповещению.
Время ожидания до повторной отправки оповещений по группе Лаг до повторной отправки ранее отправленных оповещений.
Совпадающие лейблы оповещений маршрутизации Лейблы, по которым оповещение попадает на маршрут.
Ключи совпадающих лейблов для группировки По каким ключам сгруппировать оповещения среди выбранных в совпадающих лейблах.
Интервалы блокировки оповещения Ранее созданные временные интервалы, когда приостанавливать отправку по маршруту.

Подмаршруты задают более детальную маршрутизацию среди групп, выбранных в корневом маршруте. В подмаршруте укажите, требуется ли продолжить обработку оповещений одной группы в других подмаршрутах. Группа определяется в корневом маршруте.


Временные интервалы (time_intervals)

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

Скриншот: временные интервалы

Скриншот интерфейса: Скриншот: временные интервалы

Интервалы, охватывающие несколько смежных элементов времени, объединяются в диапазоны. Для выделения можно использовать Shift. Кнопка Выбрать всё выбирает все элементы; повторное нажатие снимает выбор.

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


Блокировка оповещений (inhibit)

На странице Блокировка оповещений настраивают критерии, по которым оповещения блокируются (не отправляются).

Скриншот интерфейса платформы

Скриншот интерфейса: Скриншот интерфейса платформы

Параметр Описание
Ключи лейблов для совпадения (equal) Список ключей лейблов, значения которых должны совпадать у исходного и целевого оповещения, чтобы блокировка сработала.
о каким значениям лейблов отправлять оповещения (target_matchers) Целевые лейблы оповещений, при совпадении значений которых, оповещения будут отправлены.
При наличии каких оповещений блокировать (source_matchers) Лейблы исходных оповещений, наличие которых вызывает блокировку целевых. Целевые оповещения не отправляются, пока активно хотя бы одно исходное.

Порядок настройки

  1. Убедитесь, что в нужном кластере включены и работают сервисы мониторинга (см. Условия работы алертинга).
  2. При необходимости создайте группу правил и добавьте правила (alert или record).
  3. Создайте получателей (Email, Telegram, Webhook) при необходимости внешней доставки.
  4. При необходимости задайте временные интервалы и укажите их в маршрутах.
  5. Настройте маршруты — получатель, лейблы, интервалы.
  6. При необходимости настройте блокировку оповещений (inhibit).

Дополнительно