Перейти к основному содержимому

Оповещения

Памир использует Alertmanager для отправки оповещений. Итоговая конфигурация Alertmanager складывается из настроек:

  • Общих настроек
  • Интервалов времени
  • Отправителей
  • Адресатов
  • Шаблонов сообщений

Итоговая конфигурация, которая попадет в Alertmanager доступна в разделе Настройки -> Уведомления -> Alert Manager.

подсказка

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

Общие настройки

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

global:
# Поле заголовка From по умолчанию для SMTP.
[ smtp_from: <tmpl_string> ]
# SMTP-сервер (smarthost) по умолчанию, используемый для отправки электронных писем, включая номер порта.
# Обычно номер порта — 25 или 587 для SMTP поверх TLS (иногда называемого STARTTLS).
# Пример: smtp.example.org:587
[ smtp_smarthost: <string> ]
# Имя хоста по умолчанию для идентификации на SMTP-сервере.
[ smtp_hello: <string> | default = "localhost" ]
# Аутентификация SMTP с использованием CRAM-MD5, LOGIN и PLAIN. Если не указано, Alertmanager не аутентифицируется на SMTP-сервере.
[ smtp_auth_username: <string> ]
# Аутентификация SMTP с использованием LOGIN и PLAIN.
[ smtp_auth_password: <secret> ]
# Аутентификация SMTP с использованием LOGIN и PLAIN.
[ smtp_auth_password_file: <string> ]
# Аутентификация SMTP с использованием PLAIN.
[ smtp_auth_identity: <string> ]
# Аутентификация SMTP с использованием CRAM-MD5.
[ smtp_auth_secret: <secret> ]
# Требование TLS для SMTP по умолчанию.
# Обратите внимание, что Go не поддерживает незашифрованные соединения с удалёнными SMTP-узлами.
[ smtp_require_tls: <bool> | default = true ]
# Конфигурация TLS по умолчанию для SMTP-получателей.
[ smtp_tls_config: <tls_config> ]

[ telegram_api_url: <string> | default = "https://api.telegram.org" ]


# Конфигурация HTTP-клиента по умолчанию.
[ http_config: <http_config> ]

# Параметр ResolveTimeout — это значение по умолчанию, используемое Alertmanager, если оповещение
# не включает EndsAt. После истечения этого времени Alertmanager может объявить оповещение завершённым, если оно не было обновлено.
# Это не влияет на оповещения от Prometheus, так как они всегда включают EndsAt.
[ resolve_timeout: <duration> | default = 5m ]

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

Интервалы времени позволяют определять периоды времени, когда определенные алерты должны или не должны срабатывать. Это полезно для:

  • Отключения уведомлений в нерабочее время
  • Настройки разных расписаний для разных команд
  • Создания периодов обслуживания

Создание интервала времени

Cтруктура конфигурации

time_intervals:
- times:
[ - <time_range> ...]
# Диапазоны, включающие начальное время и не включающие конечное время, чтобы упростить
# представление времени, которое начинается/заканчивается на границах часов.
# Например, start_time: '17:00' и end_time: '24:00' начнутся в 17:00 и
# закончатся непосредственно перед 24:00.
weekdays:
[ - <weekday_range> ...]
# Cписок дней недели, где неделя начинается в воскресенье и заканчивается в субботу. Дни должны
# быть указаны по имени (например, 'Sunday'). Для удобства диапазоны также принимаются
# в форме <start_day>:<end_day> и включаются с обоих концов.
# Например: ['monday:wednesday','saturday', 'sunday']
days_of_month:
[ - <days_of_month_range> ...]
# Cписок числовых дней в месяце. Дни начинаются с 1. Также принимаются отрицательные значения,
# которые начинаются в конце месяца, например, -1 в январе будет представлять 31 января.
# Расширение за пределы начала или конца месяца приведет к его ограничению.
# Например, указание ['1:31'] в феврале ограничит фактическую дату окончания до 28
# или 29 в зависимости от високосных лет. Включительно с обоих концов.
months:
[ - <month_range> ...]
# Cписок календарных месяцев, идентифицированных по имени без учета регистра (например, «Январь») или по номеру, где Январь = 1.
# Диапазоны также принимаются. Например, ['1:3', 'may:august', 'december']. Включительно с обоих концов.
years:
[ - <year_range> ...]
# Числовой список лет. Диапазоны допускаются. Например, ['2020:2022', '2030']. Включительно с обоих концов.
location: <string>
# Строка, которая соответствует местоположению в базе данных часовых поясов IANA.

Пример:

time_intervals:
- name: 'workhours' # Название периода
time_intervals: # Список временных интервалов
- weekdays: ['monday:friday'] # Дни недели
times: # Часовые интервалы
- start_time: '09:00' # Начало (формат HH:MM)
end_time: '18:00' # Конец (формат HH:MM)
- location: 'Europe/Moscow' # Часовой пояс
- name: 'weekends'
time_intervals:
- weekdays: ['saturday', 'sunday']

Основные параметры

1. Интервалы по дням недели

weekdays: ['monday:friday']  # С понедельника по пятницу
weekdays: ['saturday', 'sunday'] # Отдельные дни

2. Часовые интервалы

times:
- start_time: '09:00' # Формат HH:MM
end_time: '18:00'

Пример использования

route:
receiver: 'team-email'
routes:
- receiver: 'oncall-sms'
matchers: ['severity=critical']
mute_time_intervals: ['weekends'] # Не отправлять SMS по выходным
active_time_intervals: ['workhours'] # Только в рабочее время

receivers:
- name: 'team-email'
email_configs: [...]
- name: 'oncall-sms'
webhook_configs: [...]

time_intervals:
- name: 'workhours'
time_intervals:
- weekdays: ['monday:friday']
times:
- start_time: '09:00'
end_time: '18:00'
- name: 'weekends'
time_intervals:
- weekdays: ['saturday', 'sunday']

Особенности работы

  1. Приоритеты:

    • mute_time_intervals - подавляет уведомления
    • active_time_intervals - разрешает уведомления только в указанные периоды
  2. Форматы времени:

    • HH:MM для ежедневных интервалов
  3. Часовые пояса:

    • По умолчанию используется UTC
    • Можно указать через location

Отправители

Отправители отвечают за механизм передачи уведомлений пользователю. Отправители создаются путем выбора в навигационнон меню Настройки -> Уведомления -> Отправители (рис.Создание отправителя №1), затем после нажатия кнопки добавить (рис.Создание отправителя №2) должен появиться в списке элемент Новый отправитель с пустыми полями(рис.Создание отправителя №3) Название, Активный, тип отправителя, prometheus конфигурация. После нажатия кнопки сохранить, будет создан отправитель.

Создание отправителя Создание отправителя

E-mail

Памир позволяет отправлять алерты по электронной почте. Вот полная структура с описанием всех параметров:

from: 'alertmanager@example.com'    # Опционально (по умолчанию используется smtp_from)
smarthost: 'smtp.example.com:587' # Обязательное поле
auth_username: 'user@example.com' # Опционально
auth_password: 'password' # Опционально
auth_secret: 'secret' # Альтернатива auth_password
auth_identity: 'user@example.com' # Опционально (обычно для SMTP)
headers: # Дополнительные заголовки
Subject: '[Alert] {{ .CommonLabels.alertname }}'
X-Custom: 'Prometheus Alert'
html: '{{ template "email.html" . }}' # HTML-шаблон
text: '{{ template "email.txt" . }}' # Текстовый шаблон
require_tls: true # Использовать TLS (по умолчанию true)
hello: 'alertmanager.example.com' # Имя в SMTP HELO/EHLO

Основные параметры

ПараметрТипОбязательныйОписание
fromstringНетEmail отправителя (по умолчанию smtp_from из глобальных настроек)
smarthoststringДаSMTP сервер с портом (например: smtp.gmail.com:587)
auth_usernamestringНетЛогин для SMTP-аутентификации
auth_passwordstringНетПароль для SMTP-аутентификации
auth_secretstringНетАльтернатива паролю (например, для секретов Kubernetes)
auth_identitystringНетИдентификатор для SMTP-аутентификации
require_tlsboolНетИспользовать TLS (по умолчанию true)
hellostringНетИмя хоста для SMTP HELO/EHLO

Дополнительные настройки

ПараметрОписание
headersДополнительные заголовки письма (Subject, From и др.)
htmlHTML-шаблон письма
textТекстовый шаблон письма

Пример конфигурации

from: alerts@company.com
smarthost: smtp.example.com:587
auth_username: alerts@company.com
auth_password: secret

Расширенная конфигурация с шаблонами

from: alerts@company.com
smarthost: smtp.example.com:587
auth_username: alerts@company.com
auth_password: secret
headers:
Subject: '[CRITICAL] {{ .CommonLabels.alertname }}'
html: '{{ template "email.html" . }}'

Шаблоны писем

Пример простого шаблона:

{{ define "email.html" }}
<h1>Alert: {{ .Status | toUpper }}</h1>
{{ range .Alerts }}
<h2>{{ .Labels.alertname }}</h2>
<p><strong>Summary:</strong> {{ .Annotations.summary }}</p>
<p><strong>Description:</strong> {{ .Annotations.description }}</p>
<p><strong>Time:</strong> {{ .StartsAt }}</p>
<hr>
{{ end }}
{{ end }}

Telegram

https://prometheus.io/docs/alerting/latest/configuration/#telegram_config

# Если у вас есть особые конфигурации HTTP-клиента (например, прокси), вы можете добавить их здесь.
[ http_config: <http_config> | default = {}]

# Уведомлять ли о решенных оповещениях. Значение достается из форм 'каналы связи' при создании адресата
[ send_resolved: <boolean> | default = true ]

# Телеграм API URL i.e. https://api.telegram.org.
[ api_url: <string> | default = "https://api.telegram.org" ]

# Токен для телеграм бота
[ bot_token: <secret> ]

# ID чата куда шлется сообщение. Значение достается из форм 'каналы связи' при создании адресата
[ chat_id: <int> ]

# Шаблон сообщения
[ message: <tmpl_string> default = '{{ template "telegram.default.message" .}}' ]

# Режим анализа сообщения Telegram, поддерживаемые значения: MarkdownV2, Markdown, HTML и пустая строка для обычного текста.
[ parse_mode: <string> | default = "HTML" ]

Пример

http_config:
follow_redirects: true
enable_http2: true
api_url: https://api.telegram.org
bot_token: '7833060745:AAELlXdWPQ_iVsU3Nii3NH6s-iqoldQHeX8'
message: '{{ template "TelegramMessage" .}}'
parse_mode: HTML

Webhook

В Памир конфигурация webhook позволяет настраивать отправку алертов на внешние HTTP-серверы (вебхуки). Вот полная структура с описанием всех доступных параметров:

# Дополнительные параметры:
http_config: # Настройки HTTP-запроса
basic_auth: # Базовая аутентификация
username: 'user'
password: 'pass'
bearer_token: 'your-token' # Токен в заголовке Authorization: Bearer
bearer_token_file: '/path/to/token' # Альтернатива: токен из файла
proxy_url: 'http://proxy:8080' # Прокси-сервер
tls_config: # Настройки TLS
ca_file: '/path/to/ca.crt'
cert_file: '/path/to/cert.pem'
key_file: '/path/to/key.pem'
server_name: 'alertmanager.example.com'
insecure_skip_verify: false
headers: # Кастомные заголовки
Content-Type: 'application/json'
X-Custom-Header: 'Alertmanager-Webhook'
max_alerts: 0 # Макс. кол-во алертов в одном запросе (0 = без ограничений)
timeout: 0s #Максимальное время ожидания завершения запроса webhook

Основные параметры

ПараметрТипПо умолчаниюОписание
max_alertsint0 (нет лимита)Максимальное количество алертов в одном запросе. Если алертов больше, Alertmanager разобьёт их на несколько запросов.

http_config — настройки HTTP-запроса

Позволяет настроить аутентификацию, прокси и TLS.

Аутентификация

ПараметрТипПримерОписание
basic_auth.usernamestringadminЛогин для Basic Auth.
basic_auth.passwordstringsecretПароль для Basic Auth.
bearer_tokenstringeyJhbGciOi...Токен для заголовка Authorization: Bearer <token>.
bearer_token_filestring/etc/alertmanager/tokenАльтернатива bearer_token — токен читается из файла.

Прокси и TLS

ПараметрТипПримерОписание
proxy_urlstringhttp://proxy:8080URL HTTP-прокси.
tls_config.ca_filestring/etc/ssl/ca.crtПуть к CA-сертификату.
tls_config.cert_filestring/etc/ssl/client.crtПуть к клиентскому сертификату.
tls_config.key_filestring/etc/ssl/client.keyПуть к приватному ключу.
tls_config.server_namestringalertmanager.example.comSNI (Server Name Indication).
tls_config.insecure_skip_verifyboolfalseЕсли true, отключает проверку сертификата (опасно!).

Кастомные заголовки (headers)

headers:
Content-Type: "application/json"
X-Custom-Header: "Alertmanager-Webhook"

Шаблоны сообщений

Памир использует Alertmanager для отправки оповещений. Получателем может быть одна из интеграций: E-mail, Telegram, webhook.

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

Шаблоны уведомлений Alertmanager основаны на системе шаблонов Go . Обратите внимание, что некоторые поля оцениваются как текст, а другие как HTML, что повлияет на экранирование.

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

Структура Data

Data — это структура, передаваемая в шаблоны уведомлений и вебхуки. Она содержит следующие поля:

  • Receiver (string): Имя получателя, которому будет отправлено уведомление (например, Slack, email).
  • Status (string): Статус оповещения; принимает значение firing, если хотя бы одно оповещение активно, иначе — resolved.
  • Alerts ([]Alert): Список всех объектов оповещений в данной группе.
  • GroupLabels (KV): Метки, по которым эти оповещения были сгруппированы.
  • CommonLabels (KV): Метки, общие для всех оповещений.
  • CommonAnnotations (KV): Набор аннотаций, общих для всех оповещений. Используется для добавления дополнительной информации об оповещении.
  • ExternalURL (string): Ссылка на Alertmanager, отправивший уведомление.

Тип Alerts предоставляет функции для фильтрации оповещений:

  • Alerts.Firing: возвращает список текущих активных оповещений в этой группе.
  • Alerts.Resolved: возвращает список разрешённых оповещений в этой группе.

Структура Alert

Alert описывает отдельное оповещение и содержит следующие поля:

  • Status (string): Статус оповещения (firing или resolved).
  • Labels (KV): Набор меток для данного оповещения.
  • Annotations (KV): Набор аннотаций для данного оповещения.
  • StartsAt (Time): Время начала оповещения.
  • EndsAt (Time): Время окончания оповещения.
  • GeneratorURL (string): Ссылка на источник, сгенерировавший оповещение.

Тип KV

KV представляет собой карту строковых ключей и значений (map[string]string). Он используется для хранения меток и аннотаций.

Тип KV предоставляет следующие методы:

  • Value(key string): возвращает значение для заданного ключа.
  • Exists(key string): проверяет наличие заданного ключа.
  • Match(regex string): возвращает все ключи, соответствующие заданному регулярному выражению.

Тип Time

Time представляет собой временную метку и предоставляет методы для форматирования:

  • Time.Format(layout string): форматирует временную метку согласно заданному шаблону.

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

Адресаты

Работа адресатов заключается в отправке уведомлений по 1 и более каналам отправки(Отправители) в промежутки времени указаные Интервалами Времени. Адресаты создаются путем выбора в навигационнон меню Уведомления -> Адресаты (рис.Создание адресатов №1), затем после нажатия кнопки добавить (рис.Создание адресатов №2) должен появиться в списке элемент Новый адресат с обязательными полями для заполнения Название, при существующем канале отправки уведомлений Имя отправителя, Адресат также обязательны. После нажатия кнопки сохранить, будет создан интервал.

Создание адресатов Создание адресатов

Опции полей Интервал отправки и Интервал тишины зависят от созданных Интервалов Времени

Интервал отправки и Интервал тишины Интервал отправки и Интервал тишины

В каждом канале отправки существует поле Имя отправителя, опции которого зависят от созданных Отправителей

Интервал отправки и Интервал тишины Интервал отправки и Интервал тишины

Значение поля Адресат вставляется в prometheus конфигурацию Отправителя в зависимости от его типа (смотри раздел типы Отправителей). Свитч Активный и Отправлять resolve тоже попадают в конфигурацию prometheus соответсвующего отправителя. Также есть индикатор, говорящий о активности данного отправителя и взятые из формы его создания.

Подписка на Индикаторы здоровья

Дать описание формы подписки на ИЗ