Оповещения
Памир использует 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']
Особенности работы
-
Приоритеты:
mute_time_intervals
- подавляет уведомленияactive_time_intervals
- разрешает уведомления только в указанные периоды
-
Форматы времени:
HH:MM
для ежедневных интервалов
-
Часовые пояса:
- По умолчанию используется 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
Основные параметры
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
from | string | Нет | Email отправителя (по умолчанию smtp_from из глобальных настроек) |
smarthost | string | Да | SMTP сервер с портом (например: smtp.gmail.com:587 ) |
auth_username | string | Нет | Логин для SMTP-аутентификации |
auth_password | string | Нет | Пароль для SMTP-аутентификации |
auth_secret | string | Нет | Альтернатива паролю (например, для секретов Kubernetes) |
auth_identity | string | Нет | Идентификатор для SMTP-аутентификации |
require_tls | bool | Нет | Использовать TLS (по умолчанию true ) |
hello | string | Нет | Имя хоста для SMTP HELO/EHLO |
Дополнительные настройки
Параметр | Описание |
---|---|
headers | Дополнительные заголовки письма (Subject, From и др.) |
html | HTML-шаблон письма |
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_alerts | int | 0 (нет лимита) | Максимальное количество алертов в одном запросе. Если алертов больше, Alertmanager разобьёт их на несколько запросов. |
http_config
— настройки HTTP-запроса
Позволяет настроить аутентификацию, прокси и TLS.
Аутентификация
Параметр | Тип | Пример | Описание |
---|---|---|---|
basic_auth.username | string | admin | Логин для Basic Auth. |
basic_auth.password | string | secret | Пароль для Basic Auth. |
bearer_token | string | eyJhbGciOi... | Токен для заголовка Authorization: Bearer <token> . |
bearer_token_file | string | /etc/alertmanager/token | Альтернатива bearer_token — токен читается из файла. |
Прокси и TLS
Параметр | Тип | Пример | Описание |
---|---|---|---|
proxy_url | string | http://proxy:8080 | URL HTTP-прокси. |
tls_config.ca_file | string | /etc/ssl/ca.crt | Путь к CA-сертификату. |
tls_config.cert_file | string | /etc/ssl/client.crt | Путь к клиентскому сертификату. |
tls_config.key_file | string | /etc/ssl/client.key | Путь к приватному ключу. |
tls_config.server_name | string | alertmanager.example.com | SNI (Server Name Indication). |
tls_config.insecure_skip_verify | bool | false | Если 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 соответсвующего отправителя. Также есть индикатор, говорящий о активности данного отправителя и взятые из формы его создания.
Подписка на Индикаторы здоровья
Дать описание формы подписки на ИЗ