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 удобен для быстрой реакции, почта — для архива и эскалации. Начните с одного тестового алерта, убедитесь, что он доходит и снимается, и только потом добавляйте десятки правил.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте