Обработка правил оповещения

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

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

Получатели

Скриншот

alertsreceivers

Страница “Получатели” представляет собой таблицу с полями:

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

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

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

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

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

Webhook

Используется для отправки сообщений в сервисы агрегации уведомлений, service-desk, task-manager.

  • Имя пользователя (необязательное поле. Используется для авторизации в паре с паролем. Не требуется при использовании Bearer-токена.);
  • Пароль (необязательное поле. Используется для авторизации в паре с именем пользователя. Не требуется при использовании Bearer-токена.);
  • Bearer-токен (необязательное поле. Используется для авторизации. Не требуется при использовании имени пользователя и пароля);
  • URL-прокси;
  • Отправлять решенные: инициирует отправку сообщения о том, что оповещение перестало быть актуальным. По умолчанию: да;
  • Максимальное количество оповещений, отправляемых в одном сообщении webhook: Максимальное количество предупреждений, отправляемых на одно сообщение веб-перехватчика. При значении 0 - включаются все оповещения;
  • URL-адрес (обязательное поле): эндпоинт для отправки HTTP-запросов;
  • Использовать TLS: да/нет (по умолчанию нет); При необходимости настроить безопасное соединение дополнительно необходимо ввести:
  • Имя сервера (обязательное поле);
  • Файл сертификата УЦ (обязательное поле) CAFile Файл сертификата удостоверяющего центра в формате base64;
  • Файл сертификата клиента (обязательное поле) Файл сертификата клиента в формате base64;
  • Файл ключа клиента (обязательное поле) Файл ключа клиента в формате base64;
  • Нужно ли отключить проверку сертификата (по умолчанию нет);
Обратите внимание! Файл сертификата должен содержать: ``` ----BEGIN CERTIFICATE---- и ----END CERTIFICATE---- ```

По завершении настройки получателя необходимо настроить, какие оповещения будут отправляться по этому каналу. Для этого в разделе Кластер/Оповещения/Маршруты настройте отправку оповещений по этому каналу. При необходимости выберите лейблы уведомлений, которые будут служить фильтром для отправки по заданному каналу.

Пример настройки webhook

  1. Загрузите в кластер управления манифесты объектов Deployment, Service, VMRule с помощью импорта манифестов.
Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-webhook
  namespace: monitoring
  labels:
    app: demo-webhook
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo-webhook
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: demo-webhook
    spec:
      terminationGracePeriodSeconds: 30
      automountServiceAccountToken: false
      containers:
      - name: demo-webhook
        image: quay.io/mgoerens/demo-webhook-receiver-alertmanager:0.0.1
        imagePullPolicy: IfNotPresent
        env:
        - name: PORT
          value: "8080"
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
        resources:
          limits:
            cpu: 10m
            memory: 30Mi
          requests:
            cpu: 10m
            memory: 30Mi
        securityContext:
          capabilities:
            drop:
              - ALL
          allowPrivilegeEscalation: false
Service
apiVersion: v1
kind: Service
metadata:
  name: demo-webhook
  namespace: monitoring
  labels:
    app: demo-webhook
spec:
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
    name: http
  selector:
    app: demo-webhook
VMRule
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMRule
metadata:
  labels:
    app: demo-webhook
    role: user
  name: example-alert
  namespace: victoria-metrics
spec:
  groups:
    - concurrency: 1
      interval: 1m
      labels:
        ruletype: alert
      name: example
      rules:
        - alert: ExampleAlert
          expr: vector(1)
      type: prometheus
  1. В кластере, для которого необходимо настроить алертинг, перейдите в раздел Кластер/Оповещения/Получатели, создайте получателя с типом webhook. В поле URL-адрес введите значение: http://demo-webhook.monitoring.svc/webhook. В качестве имени получателя укажите demo-webhook. Остальные поля оставьте незаполненными. Сохраните внесенные изменения.

  2. В разделе Кластер/Оповещения/Маршруты настройте отправку оповещений по этому каналу. При необходимости выберите лейблы уведомлений, которые будут служить фильтром для отправки по заданному каналу.

  3. В неймспейсе monitoring кластера управления перейдите к просмотру пода с именем demo-webhook. Откройте окно просмотра логов контейнера. В случае корректной настройки в логах будут сообщения сработавших алертов в кластере.

Скриншот

webhooklocalalert2

webhooklocalalert

Telegram

Для настройки отправки оповещений в telegram необходимо:

  1. Создать telegram-бота. Обратите внимание, токен бота выдается однократно при создании через @BotFather.
  2. Определить получателя: это может быть отправка пользователю или в чат группе пользователей.

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

  • Telegram API URL (имеет дефолтное значение, необязательно для заполнения)
  • Формат сообщения: Markdown, Markdownv2, HTML (по умолчанию HTML);
  • Токена бота, от имени которого будет отправляться оповещение;
  • Идентификатор чата (индивидуального или группового). Узнать идентификатор можно, стартовав из требуемого чата диалог в боте: https://t.me/userinfobot
  • Отправлять решенные: инициирует отправку сообщения о том, что оповещение перестало быть актуальным. По умолчанию: да;
  • Отключить уведомления: сообщения будут приходить без звукового уведомления (по умолчанию нет);
  • Шаблон уведомления в текстовом формате. Если шаблон не заполнить, то будет приходить сообщение по стандартному шаблону оператора, например:
Пример оповещения без настройки шаблона

Alerts Firing: Labels:

  • alertname = example
  • alertgroup = warning
  • cluster = clustername
  • ruletype = alert
  • severity = warning Annotations:
  • description = demo
  • summary = demo Source: http://vmalert-vmalert-503055269-6467fdc88f-5srrs:8080/vmalert/alert?group_id=13440678846293985821&alert_id=946083850580454XXX

Кроме того, вы можете настроить шаблон непосредственно в поле шаблона. Так, например, чтобы вывести информацию о дате и времени срабатывания, уровне критичности и описании, можно использовать шаблон непосредственно в поле “Шаблон уведомления в текстовом формате “:

Пример настройки шаблона
{{ define "telegram.message" }}
{{ if eq .Status "firing" }}🔥{{ else }}✅{{ end }} *[{{ .Status | toUpper }}] {{ .CommonLabels.alertname }}*

{{ range .Alerts }}
*Severity:* {{ .Labels.severity | title }}
*Summary:* {{ .Annotations.summary }}
*Time:* {{ .StartsAt.Format "2006-01-02 15:04:05 UTC" }}

{{ if .Annotations.description }}*Description:* {{ .Annotations.description }}
{{ end -}}
{{ if .Annotations.runbook }}[Runbook]({{ .Annotations.runbook }})
{{ end -}}
{{ end }}
{{ end }}
{{ template "telegram.message" . }}

Тогда оповещение будет иметь вид:

Пример оповещения по шаблону из примера выше

🔥 [FIRING] TargetDown

Severity: Warning Summary: One or more targets are unreachable. Time: 2025-06-20 03:20:30 UTC

Description: 50% of the vector/ targets in logging namespace are down.

  • Использовать TLS: да/нет (по умолчанию нет);

Учетные данные для отправки (НЕОБЯЗАТЕЛЬНО): пара “Имя пользователя”/“Пароль” или “Bearer-токен”.

  • Имя пользователя (необязательное поле. Используется для авторизации в паре с паролем. Не требуется при использовании Bearer-токена.);
  • Пароль (необязательное поле. Используется для авторизации в паре с именем пользователя. Не требуется при использовании Bearer-токена.);
  • Bearer-токен (необязательное поле. Используется для авторизации. Не требуется при использовании имени пользователя и пароля);

При необходимости настроить безопасное соединение дополнительно необходимо ввести:

  • Имя сервера (обязательное поле);
  • Файл сертификата УЦ (обязательное поле) CAFile Файл сертификата удостоверяющего центра в формате base64;
  • Файл сертификата клиента (обязательное поле) Файл сертификата клиента в формате base64;
  • Файл ключа клиента (обязательное поле) Файл ключа клиента в формате base64;
  • Нужно ли отключить проверку сертификата (по умолчанию нет);

По завершении настройки получателя необходимо настроить, какие оповещения будут отправляться по этому каналу. Для этого в разделе Кластер/Оповещения/Маршруты настройте отправку оповещений по этому каналу. При необходимости выберите лейблы уведомлений, которые будут служить фильтром для отправки по заданному каналу.

Email

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

  • Идентификатор авторизации: необходим для SMTP авторизации с использованием PLAIN.
  • Имя пользователя: необходимо для SMTP авторизации с использованием CRAM-MD5, LOGIN или PLAIN. Если авторизация не используется, оставьте поле незаполненным.
  • Пароль: необходим для SMTP авторизации с использованием CRAM-MD5, LOGIN или PLAIN. Если авторизация не используется, оставьте поле незаполненным.
  • Секрет авторизации: необходим для SMTP авторизации с использованием CRAM-MD5. Если авторизация с CRAM-MD5 не используется, оставьте поле незаполненным.
  • E-mail получателя: целевой e-mail-адрес для получения оповещений.
  • Служебные заголовки, состоящие из имени заголовка и тела заголовка;
  • Hostname для идентификации SMTP-сервера (Необязательное);
  • Шаблон уведомления в формате HTML
  • Отправлять решенные: инициирует отправку сообщения о том, что оповещение перестало быть актуальным. По умолчанию: да;
  • SMTP сервер (обязательное поле).

Обратите внимание! Для получения оповещений по e-mail:

  • на стороне сервера должны быть открыты порты 25 и/или 587 для SMTP, 465 для SMTPS;
  • при централизованном алертинге в кластере управления платформы “Штурвал” не установлено ограничений на выход по перечисленным портам;
  • при локальном алертинге в клиентском кластере платформы “Штурвал” не установлено ограничений на выход по перечисленным портам.

Пример настройки отправки уведомления на devmail

  1. Подготовьте файл конфигурации maildev:
Манифест файла конфигурации maildev
image:
  registry: mirror.gcr.io
  repository: maildev/maildev
  pullPolicy: IfNotPresent
#  tag: "2.2.1"

resources:
  limits:
    cpu: 200m
    memory: 256Mi
  requests:
    cpu: 100m
    memory: 128Mi

ingress:
  annotations:
    cert-manager.io/cluster-issuer: <ваше значение параметра>
  enabled: true
  className: "nginx"

  hosts:
    - host: <ваше значение параметра>
      paths:
        - path: /
          pathType: ImplementationSpecific
  tls:
    - secretName: maildev-ingress-tls
      hosts:
        - <ваше значение параметра>
Параметр Описание Тип данных По умолчанию
cert-manager.io/cluster-issuer Имя Clusterissuer кластера управления string corp-acme
host Хост будущего maildev.Формируется по принципу maildev.имя-кластера-управления.<base_domain>. string maildev.apps.ip-XX-XX-XXX-XXX.shturval.link
  1. Установите devmail с полученным файлом конфигурации в неймспейс monitoring кластера управления.
Команда для установки devmail

Не забудьте в конце команды вместо ИМЯ-ФАЙЛА-КОНФИГУРАЦИИ вписать имя, с которым вы сохранили конфигурационный файл!

helm upgrade --install -n monitoring maildev https://github.com/christianknell/helm-charts/releases/download/maildev-1.3.4/maildev-1.3.4.tgz -f ИМЯ-ФАЙЛА-КОНФИГУРАЦИИ

В случае, если настройка корректна, в неймспейсе monitoring кластера управления появится Pod с префиксом maildev.

Скриншот

mgmtpodmaildev

  1. В кластере, для которого требуется настроить отправку оповещения на почту, в разделе Кластер/Оповещения/Получатели создайте получателя с типом “email”.

Заполните отправителя, получателя. Пропишите SMTP сервер: maildev-smtp.monitoring.svc:1025.

Если настройка верна, то по адресу, указанному в качестве хоста в конфигурационном файле (https://maildev.имя-кластера-управления.<base_domain>/#/) будет доступен maildev.

  1. В разделе Кластер/Оповещения/Маршруты настройте отправку оповещений по этому каналу. При необходимости выберите лейблы уведомлений, которые будут служить фильтром для отправки по заданному каналу.
Скриншот

mailreceiver

Если настройка оказалось верной, то на devmail вы увидите уведомление следующего вида

Скриншот

mailalertexample

Временные интервалы

Скриншот

temeinterval

На странице временных интервалов вы можете определить интервалы месяцев, дней месяца, дней недели и часовых диапазонов для заглушения отправки оповещений. Эти интервалы используются в конфигурации маршрутов. Интервалы, охватывающие несколько смежных элементов времени, будут объединены в диапазоны. Для выделения можно использовать шифт. Кнопка “Выбрать всё” выбирает все элементы, повторное нажатие снимает выбор. Если в созданной конфигурации не задано ни одного значения, то это равнозначно выбранным всем значениям. Например, если вы указали дни недели, но не выбрали месяцы, то эти дни недели будут равнозначно выбраны в каждом месяце.

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

Скриншот

vlockalerts

Определите, по каким критериям отправка оповещений должна быть заблокирована. Для этого введите:

  • Ключи лейблов оповещений (equel): ключи самих оповещений, не правил оповещений. Это могут быть: alertname, env, severity, namespace и др.
  • По каким значениям лейблов отправлять оповещения (target_matchers) - целевые лейблы оповещений, при совпадении значений которых, оповещения будут отправлены.
  • Не отправлять при наличии оповещений со значениями целевых лейблов (source_matchers) - оповещения с этими значениями в лейблах внутри группы не будут отправлены по - маршруту, пока есть нерешенные оповещения с целевыми лейблами

Маршруты

Скриншот

alertways

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

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

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

×