Prometheus умеет вычислять правила, но не предназначен для отправки сообщений: дедупликацию, группировку, повторные уведомления и подавление шума выполняет Alertmanager. Без него один упавший узел порождает десятки писем, а важный критический алерт теряется среди предупреждений. Ниже — рабочая связка Prometheus и Alertmanager с доставкой в Telegram и на почту, проверкой конфигурации и разбором ошибок, из-за которых уведомления не приходят.
Место Alertmanager в цепочке
Prometheus периодически вычисляет выражения из файлов правил. Когда условие выполняется дольше указанного времени for, он отправляет алерт в Alertmanager. Тот объединяет однотипные события, применяет маршруты и замолчанные интервалы, а затем вызывает получателя. Обратный путь тоже важен: когда условие перестаёт выполняться, Prometheus сообщает об этом, и Alertmanager может отправить уведомление о восстановлении.
Разделение обязанностей упрощает эксплуатацию. Правила лежат рядом с конфигурацией Prometheus и проверяются promtool. Маршруты и шаблоны сообщений живут в отдельном файле и проверяются amtool. Если почтовый шлюз недоступен, это не мешает собирать метрики.
Установка и связка с Prometheus
В Debian и Ubuntu пакет и служба называются prometheus-alertmanager; в официальном архиве служба называется alertmanager. Она слушает порт 9093, а конфигурация в Debian лежит в /etc/prometheus/alertmanager.yml. Не открывайте его в интернет: API позволяет создавать и снимать silences, а в конфигурации могут быть токены.
sudo apt install prometheus-alertmanager
promtool check config /etc/prometheus/prometheus.yml
sudo systemctl enable --now prometheus prometheus-alertmanager
ss -tulpn | grep 9093
В prometheus.yml добавьте адрес Alertmanager и каталог с правилами. Пути должны совпадать с теми, что видит служба, иначе правила молча не загрузятся.
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets: ['127.0.0.1:9093']
rule_files:
- '/etc/prometheus/rules/*.yml'
scrape_configs:
- job_name: node
static_configs:
- targets: ['127.0.0.1:9100']
Правило алерта
Начните с одного понятного условия, чтобы проверить всю цепочку. Пример ниже срабатывает, когда загрузка процессора держится выше 85 процентов десять минут. Метка severity понадобится для маршрутизации.
groups:
- name: host
rules:
- alert: HostHighCpu
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
for: 10m
labels:
severity: warning
annotations:
summary: "Высокая загрузка CPU на {{ $labels.instance }}"
description: "Загрузка выше 85% в течение 10 минут."
Проверьте файл до перезапуска: promtool check rules ловит синтаксис и ошибки в выражениях. Затем откройте страницу Prometheus с правилами и убедитесь, что состояние перешло в pending, а после for — в firing. Если алерт не появляется, сравните выражение с графиком и проверьте, что нужная метрика вообще собирается.
Маршруты и получатели
Конфигурация Alertmanager состоит из глобальных параметров, дерева маршрутов и списка получателей. В примере критические события идут в Telegram, предупреждения — на почту, а повтор одинакового уведомления ограничен четырьмя часами.
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.example.com:587'
smtp_from: 'alerts@example.com'
smtp_auth_username: 'alerts@example.com'
smtp_auth_password_file: '/etc/prometheus/smtp.password'
smtp_require_tls: true
route:
receiver: telegram
group_by: ['alertname', 'instance']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
routes:
- matchers: ['severity="critical"']
receiver: telegram
- matchers: ['severity="warning"']
receiver: email
receivers:
- name: telegram
telegram_configs:
- bot_token_file: '/etc/prometheus/telegram.token'
chat_id: -1001234567890
send_resolved: true
parse_mode: HTML
- name: email
email_configs:
- to: 'admin@example.com'
send_resolved: true
inhibit_rules:
- source_matchers: ['severity="critical"']
target_matchers: ['severity="warning"']
equal: ['alertname', 'instance']
Секреты не храните в основном файле. Токен бота и пароль SMTP положите в отдельные файлы с правами 0600 и владельцем, от которого работает служба. Директивы bot_token_file и smtp_auth_password_file читают значение при старте; после изменения файла нужен перезапуск.
Telegram: токен и chat_id
Создайте бота через BotFather и сохраните токен. Для личного чата chat_id положительный, для группы — отрицательный, часто начинается с -100. Бот должен иметь право писать в выбранный чат; в группе его обычно добавляют администратором. Чтобы узнать идентификатор, отправьте боту сообщение и посмотрите поле chat.id в ответе метода getUpdates любым удобным HTTP-клиентом. Не публикуйте токен и не пересылайте ответ с ним в открытые каналы.
В telegram_configs можно задать шаблон сообщения и parse_mode. Если используете HTML, экранируйте значения из аннотаций, иначе символы < и & сломают разметку. Для проверки доставки удобно временно создать правило, которое всегда истинно, но не оставляйте его в рабочей конфигурации.
Проверка, silences и диагностика
amtool входит в пакет Alertmanager и умеет проверять конфигурацию, смотреть активные алерты и создавать временные подавления. Полный URL указывать не нужно, если используется локальный адрес по умолчанию.
amtool check-config /etc/prometheus/alertmanager.yml
amtool alert query
amtool silence add alertname=HostHighCpu --duration=2h --comment="Плановые работы"
amtool silence query
journalctl -u prometheus-alertmanager -n 50 --no-pager
Если сообщения не приходят, проверьте по порядку: служба запущена, порт 9093 доступен Prometheus, правило находится в статусе firing, маршрут совпадает по меткам, получатель настроен и не заблокирован silence. Ошибки SMTP обычно видны в журнале: неверный порт, отказ в аутентификации, требование TLS. Для Telegram частая причина — неверный знак chat_id или бот, которого не добавили в группу.
Чек-лист эксплуатации
- Файлы правил и конфигурация проверяются
promtoolиamtoolдо перезапуска. - Токены лежат в файлах с правами
0600, порт 9093 закрыт снаружи. - Для критических и предупреждающих событий настроены разные маршруты.
- Подавление настроено так, чтобы критический алерт не скрывал важные предупреждения.
- Раз в месяц проверяется тестовое уведомление и актуальность chat_id.
Итог
Alertmanager превращает поток событий Prometheus в управляемые уведомления. Ключевые элементы — корректное правило с for, понятное дерево маршрутов, защищённые секреты и проверка конфигурации перед применением. Telegram удобен для быстрой реакции, почта — для архива и эскалации. Начните с одного тестового алерта, убедитесь, что он доходит и снимается, и только потом добавляйте десятки правил.