Skip to content

Alertmanager

Alertmanager - это компонент в экосистеме Prometheus, который предназначен для управления и отправки оповещений (alerting) на основе метрик и правил, определенных в Prometheus. Он играет ключевую роль в системе мониторинга, позволяя операторам и администраторам мониторить состояние системы и получать уведомления о проблемах или аномалиях.

Конфигурация Alertmanager

Конфигурация Alertmanager осуществляется через YAML-файл, который задает, как оповещения должны обрабатываться, группироваться и отправляться получателям (email, Slack, Telegram и др.). Ключевые параметры включают настройку receiver (получателей), route (маршрутизацию оповещений), groupBy (правила группировки), groupWait, groupInterval и repeatInterval (интервалы для групповых уведомлений), а также настройку inhibit (ингибирования, подавления дублирующих алертов).

alertmanager.yml:

  • global. Глобальные настройки, которые применяются ко всем последующим блокам, если не переопределены локально.
  • route. Определяет основную логику маршрутизации оповещений.
    • receiver: Имя получателя, указанного в разделе receivers.
    • group_by: Список меток (labels), которые будут использоваться для объединения оповещений в одно уведомление.
    • group_wait: Время ожидания перед отправкой первого уведомления для новой группы.
    • group_interval: Время ожидания перед отправкой обновленного уведомления для существующей группы.
    • repeat_interval: Время ожидания перед повторной отправкой последнего уведомления, если ситуация сохраняется.
  • receivers. Список получателей, куда будут отправляться оповещения. Каждый receiver имеет свое уникальное имя и содержит настройки для различных интеграций (например, email_configs, slack_configs, telegram_configs).
  • templates. Пути к файлам шаблонов, которые используются для форматирования тела уведомлений.
  • inhibit_rules. Правила, которые позволяют подавлять или "заглушать" одни оповещения другими. Например, если срабатывает оповещение о недоступности целого кластера, то другие, менее критичные оповещения об этом кластере, будут подавлены.
/etc/alertmanager/alertmanager.yml
global:   # Глобальные настройки по умолчанию для всех получателей и маршрутов
  resolve_timeout: 5m # Время ожидания перед тем, как считать оповещение разрешенным
  # Другие глобальные настройки, например:
  # telegram_configs:
  #   - bot_token: "YOUR_BOT_TOKEN"
  #     chat_id: "YOUR_CHAT_ID"

route:  # Корневой маршрут, к которому привязаны все остальные маршруты
  group_by: ['alertname', 'cluster'] # Группировка оповещений по этим тегам
  group_wait: 30s # Время ожидания перед первой отправкой группы оповещений
  group_interval: 5m # Время интервала между отправками группы оповещений
  repeat_interval: 4h # Время интервала перед повторной отправкой одних и тех же оповещений
  receiver: 'default-receiver' # Получатель по умолчанию

  # Дочерние маршруты для более специфичной обработки оповещений
  routes:
    - match:
        severity: 'critical' # Оповещения с тегом severity=critical
      receiver: 'critical-receiver' # Отправлять на критический получатель
      # Если здесь нет, то оповещения с 'critical' могут также идти в default-receiver

    - match_re:
        service: 'web-.*' # Оповещения, где service начинается с 'web-'
      receiver: 'web-receiver' # Отправлять на получатель для веб-сервисов

receivers:
  # Определения получателей оповещений
  - name: 'default-receiver' # Имя получателя
    email_configs: # Настройки для Email
      - to: 'ops@example.com'
        from: 'alertmanager@example.com'
        smarthost: 'smtp.example.com:587'
        auth_username: 'alertmanager@example.com'
        auth_password: 'your_password'
        headers:
          Subject: '[{{ .CommonLabels.alertname }}] {{ .GroupLabels.cluster }}'
    webhook_configs: # Настройки для Webhooks
      - url: 'http://localhost:5001/'

  - name: 'critical-receiver'
    slack_configs: # Настройки для Slack
      - api_url: 'YOUR_SLACK_WEBHOOK_URL'
        channel: '#critical-alerts'
        text: '{{ template "slack.critical.text" . }}' # Использование кастомного шаблона

   - name: 'telegram'
      telegram_configs:
        - bot_token: 'ВАШ_BOT_TOKEN' # Токен вашего Telegram-бота, полученный от BotFather
          chat_id: -1001234567890 # ID чата или канала, куда будут отправляться уведомления
          # api_url: 'https://api.telegram.org' # Опционально, если вы используете нестандартный API
          # parse_mode: 'HTML' # Опционально, если вы хотите использовать форматирование в сообщениях

templates:
  - "/etc/alertmanager/templates/*.tmpl" # Путь к файлам с шаблонами сообщений

Prometheus config

Так же необходимо сказать prometheus куда слать Алерты

/etc/prometheus/prometheus.yml
alerting:
  alertmanagers:
  - scheme: http
    static_configs:
    - targets:
      - "alertmanager:9093"