Настройка оповещений#

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

При настройке оповещений используются два связанных термина:

  • Сигнал оповещения (alert) фиксирует событие внутри системы мониторинга: Prometheus создает его при выполнении условия правила и передает в Alertmanager.

  • Уведомление (notification) – это сообщение для администратора или дежурной команды: Alertmanager формирует его из одного или нескольких сигналов оповещения и отправляет через настроенный канал связи.

Иными словами, сигнал оповещения нужен для автоматической обработки события в системе мониторинга, а уведомление – для доставки информации человеку.

Правило оповещения представляет собой выражение PromQL, которое Prometheus выполняет периодически. Когда условие правила выполняется, Prometheus формирует сигнал оповещения и передает его в Alertmanager для дальнейшей обработки и отправки уведомлений.

Подключение Alertmanager#

Убедитесь, что Prometheus передает сигналы оповещения в Alertmanager:

  1. Проверьте наличие следующей конфигурации в файле /etc/prometheus/prometheus.yml:

    alerting:
      alertmanagers:
        - static_configs:
            - targets:
                - 127.0.0.1:9093
    
  2. Перезапустите Prometheus в случае изменения файла /etc/prometheus/prometheus.yml:

    sudo systemctl restart prometheus
    

Подготовка каталога правил#

Для хранения правил используйте отдельный каталог. Выполните следующие действия для его подготовки:

  1. Создайте каталог:

    sudo mkdir -p /etc/prometheus/rules
    
  2. Добавьте подключение правил в файл /etc/prometheus/prometheus.yml:

    rule_files:
      - /etc/prometheus/rules/*.yml
    
  3. Создайте файл правил с базовой структурой:

    sudo tee /etc/prometheus/rules/aa-alerts.yml >/dev/null <<'YAML'
    ---
    groups:
      - name: astra-automation-vm
        rules: []
    YAML
    
  4. Добавьте в файл правил необходимые правила. В примерах ниже приведены элементы списка rules. Добавляйте их в группу astra-automation-vm вместо пустого списка rules: [].

Контроль доступности платформы#

Добавьте в группу astra-automation-vm правила доступности, которые контролируют внешние точки доступа и источники метрик. Каждое правило ниже описывает отдельный отказ, поэтому при срабатывании сигнала оповещения можно сразу определить проверяемый компонент.

  • GatewayUnavailable контролирует доступность Gateway по результату проверки blackbox_exporter. Сигнал оповещения срабатывает, если Gateway не отвечает на запрос /api/gateway/v1/status/ с заголовком авторизации.

    - alert: GatewayUnavailable
      expr: probe_success{job="aa_blackbox_gateway"} == 0
      for: 2m
      labels:
        severity: critical
      annotations:
        summary: Gateway недоступен
        description: Проверка доступности Gateway завершается ошибкой более двух минут.
    
  • GatewayStatusBad используйте, если требуется проверять не только код HTTP, но и значение поля status в ответе Gateway. Ни один компонент платформы или экспортер из состава этой инструкции не формирует метрику aa_gateway_status_good. Для такой проверки необходим собственный экспортер синтетических проверок, который читает токен доступа из защищенного хранилища, опрашивает точку доступа /api/gateway/v1/status/ и публикует метрику по следующему контракту: значение 1, если все сервисы в ответе имеют состояние good, и значение 0 в противном случае. Добавляйте правило только после внедрения такого экспортера: пока метрика отсутствует, выражение правила возвращает пустой результат и сигнал оповещения не формируется.

    - alert: GatewayStatusBad
      expr: min(aa_gateway_status_good) == 0
      for: 2m
      labels:
        severity: critical
      annotations:
        summary: Gateway вернул неуспешный статус
        description: Синтетическая проверка Gateway завершается ошибкой более двух минут.
    
  • EDAUnavailable контролирует доступность API событийной автоматизации. Сигнал оповещения помогает выявить ситуацию, когда Event-Driven Automation не отвечает через Gateway.

    - alert: EDAUnavailable
      expr: probe_success{job="aa_blackbox_http",instance=~".*/api/eda/.*"} == 0
      for: 2m
      labels:
        severity: critical
      annotations:
        summary: EDA недоступен
        description: Проверка доступности EDA завершается ошибкой более двух минут.
    
  • HubUnavailable контролирует получение метрик с узлов Private Automation Hub. Prometheus формирует сигнал оповещения при потере связи с любым узлом Hub, подключенным через задание aa_hub_health.

    - alert: HubUnavailable
      expr: up{job="aa_hub_health"} == 0
      for: 2m
      labels:
        severity: critical
      annotations:
        summary: Automation Hub недоступен
        description: Prometheus не получает метрики от одного из узлов Hub.
    

Контроль выполнения заданий#

Automation Controller использует внутренний механизм емкости узлов для определения возможности запуска новых заданий. Добавьте правила, которые контролируют свободную емкость и рост очереди ожидающих заданий.

  • ControllerLowCapacity контролирует долю свободной емкости узлов Automation Controller. Сигнал оповещения помогает заранее выявить нехватку вычислительных ресурсов.

    - alert: ControllerLowCapacity
      expr: awx_instance_remaining_capacity / awx_instance_capacity < 0.1
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: Недостаточная емкость узла Controller
        description: Свободная емкость узла {{ $labels.hostname }} составляет менее 10%.
    
  • PendingJobsGrowing контролирует накопление ожидающих заданий. Такое состояние может возникать при нехватке емкости, недоступности исполняющих узлов или ошибках привязки к группам экземпляров.

    - alert: PendingJobsGrowing
      expr: awx_pending_jobs_total > 50
      for: 10m
      labels:
        severity: warning
      annotations:
        summary: Накопление ожидающих заданий
        description: Количество ожидающих заданий превышает 50 более десяти минут.
    

Контроль обработки событий#

Добавьте правила, которые контролируют очередь событий и ошибки записи событий заданий. Рост этих показателей может привести к задержке отображения вывода заданий в интерфейсе.

  • RedisEventQueueHigh контролирует размер очереди обработки событий в Redis. Рост очереди свидетельствует о том, что система не успевает обрабатывать поступающие события.

    - alert: RedisEventQueueHigh
      expr: callback_receiver_events_queue_size_redis > 10000
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: Очередь событий Redis увеличивается
        description: В очереди Redis находится {{ $value }} событий.
    
  • EventProcessingErrors контролирует ошибки пакетной записи событий. Сигнал оповещения помогает быстро выявлять проблемы записи событий в базу данных.

    - alert: EventProcessingErrors
      expr: increase(callback_receiver_batch_events_errors[10m]) > 0
      for: 2m
      labels:
        severity: warning
      annotations:
        summary: Обнаружены ошибки обработки событий
        description: За последние десять минут зафиксированы ошибки записи событий.
    

Контроль инфраструктуры#

Добавьте правила инфраструктурного уровня. Они помогают выявлять нехватку ресурсов на узлах платформы и проблемы с получением системных метрик.

  • HighCPUUsage контролирует загрузку процессора. Сигнал оповещения помогает выявлять перегруженные узлы.

    - alert: HighCPUUsage
      expr: (1 - avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m]))) > 0.9
      for: 10m
      labels:
        severity: warning
      annotations:
        summary: Высокая загрузка процессора
        description: Загрузка процессора на узле {{ $labels.instance }} превышает 90%.
    
  • HighMemoryUsage контролирует использование оперативной памяти. Сигнал оповещения помогает выявлять нехватку памяти до отказа компонента.

    - alert: HighMemoryUsage
      expr: (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) > 0.9
      for: 10m
      labels:
        severity: warning
      annotations:
        summary: Высокое использование памяти
        description: Использование оперативной памяти на узле {{ $labels.instance }} превышает 90%.
    
  • DiskSpaceLow контролирует заполнение файловых систем. Заполнение файловых систем может привести к отказу компонентов платформы.

    - alert: DiskSpaceLow
      expr: (1 - node_filesystem_avail_bytes{fstype!~"tmpfs|overlay|squashfs"} /
        node_filesystem_size_bytes{fstype!~"tmpfs|overlay|squashfs"}) > 0.85
      for: 10m
      labels:
        severity: warning
      annotations:
        summary: Недостаточно свободного места на диске
        description: Использование файловой системы превышает 85%.
    
  • NodeExporterUnavailable контролирует получение инфраструктурных метрик. Сигнал оповещения может указывать на недоступность узла или остановку node_exporter.

    - alert: NodeExporterUnavailable
      expr: up{job="aa_nodes"} == 0
      for: 2m
      labels:
        severity: critical
      annotations:
        summary: Узел платформы недоступен
        description: Метрики операционной системы не поступают более двух минут.
    

Контроль PostgreSQL#

Добавьте правила для контроля доступности PostgreSQL и риска исчерпания лимита подключений.

  • PostgreSQLUnavailable контролирует получение метрик PostgreSQL. Prometheus формирует сигнал оповещения при потере связи с базой данных.

    - alert: PostgreSQLUnavailable
      expr: up{job="aa_postgres"} == 0
      for: 2m
      labels:
        severity: critical
      annotations:
        summary: PostgreSQL недоступна
        description: Prometheus не получает метрики PostgreSQL.
    
  • PostgreSQLConnectionsHigh контролирует долю занятых подключений. Сигнал оповещения помогает заранее выявлять риск исчерпания лимита подключений.

    - alert: PostgreSQLConnectionsHigh
      expr: (
        sum(pg_stat_activity_count) by (instance)
        /
        sum(pg_settings_max_connections) by (instance)
      ) > 0.8
      for: 10m
      labels:
        severity: warning
      annotations:
        summary: Высокое количество подключений PostgreSQL
        description: Использовано более 80% допустимых подключений.
    

Контроль Redis#

Добавьте правила для контроля доступности redis_exporter, доступности Redis и использования памяти.

  • RedisExporterUnavailable контролирует получение метрик от redis_exporter. Если это правило сработало, Prometheus не может получить метрики экспортера и значение redis_up может отсутствовать.

    - alert: RedisExporterUnavailable
      expr: up{job="aa_redis"} == 0
      for: 2m
      labels:
        severity: critical
      annotations:
        summary: Redis exporter недоступен
        description: Prometheus не получает метрики Redis exporter.
    
  • RedisUnavailable контролирует ответ Redis на запросы экспортера. Сигнал оповещения помогает выявлять остановку Redis или проблемы подключения экспортера к Redis.

    - alert: RedisUnavailable
      expr: redis_up{job="aa_redis"} == 0
      for: 2m
      labels:
        severity: critical
      annotations:
        summary: Redis недоступен
        description: Redis не отвечает на запросы экспортера.
    
  • RedisMemoryHigh контролирует использование памяти Redis. Используйте это правило для экземпляров Redis, у которых настроен параметр maxmemory. Проверка redis_memory_max_bytes > 0 нужна, чтобы правило не срабатывало ложно при отсутствии ограничения maxmemory.

    - alert: RedisMemoryHigh
      expr: |
        redis_memory_max_bytes{job="aa_redis"} > 0
        and
        redis_memory_used_bytes{job="aa_redis"} / redis_memory_max_bytes{job="aa_redis"} > 0.9
      for: 10m
      labels:
        severity: warning
      annotations:
        summary: Высокое использование памяти Redis
        description: Redis использует более 90% доступной памяти.
    

Контроль Private Automation Hub#

Добавьте правила, которые контролируют ошибки приложения Private Automation Hub и ошибки импорта коллекций.

  • PAHHTTP5xx контролирует ответы HTTP уровня 5xx. Рост количества таких ответов может указывать на проблемы приложения или зависимых сервисов.

    - alert: PAHHTTP5xx
      expr: rate(django_http_responses_total_by_status_total{job="aa_hub",status=~"5.."}[5m]) > 1
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: Повышенное количество ошибок PAH
        description: PAH возвращает ошибки HTTP уровня 5xx.
    
  • HubCollectionImportFailures контролирует ошибки импорта коллекций. Сигнал оповещения помогает своевременно выявлять проблемы синхронизации контента.

    - alert: HubCollectionImportFailures
      expr: increase(galaxy_api_collection_import_failures_total[30m]) > 0
      for: 2m
      labels:
        severity: warning
      annotations:
        summary: Ошибки импорта коллекций
        description: За последние 30 минут обнаружены ошибки импорта коллекций.
    

Проверка правил#

После добавления правил выполните проверку конфигурации:

  1. Проверьте файл правил:

    promtool check rules /etc/prometheus/rules/aa-alerts.yml
    
  2. Перезапустите Prometheus:

    sudo systemctl restart prometheus
    
  3. Откройте графическую консоль Prometheus:

    http://<monitoring_host>:9090
    
  4. Перейдите в раздел Alerts.

  5. Убедитесь, что все правила успешно загружены.

Настройка каналов уведомлений#

После проверки правил подключите каналы уведомлений, принятые в организации. Alertmanager поддерживает разные способы доставки уведомлений, включая электронную почту, HTTP-приемники уведомлений и интеграции с внешними системами уведомлений. Маршрутизация сигналов оповещения задается в файле /etc/prometheus/alertmanager.yml: секция route определяет правила распределения сигналов по получателям, а секция receivers – каналы доставки.

Для настройки канала уведомлений выполните следующие действия на узле мониторинга:

  1. Опишите маршрут и получателя в файле /etc/prometheus/alertmanager.yml, например для доставки по электронной почте:

    route:
      receiver: aa-admins
      group_by:
        - alertname
      repeat_interval: 4h
    
    receivers:
      - name: aa-admins
        email_configs:
          - to: <admin_email>
            from: alertmanager@<monitoring_host>
            smarthost: <smtp_host>:25
    

    Здесь:

    • <admin_email> – адрес электронной почты администратора или дежурной команды;

    • <monitoring_host> – FQDN узла мониторинга;

    • <smtp_host> – IP-адрес или FQDN сервера SMTP.

    Полный перечень поддерживаемых каналов и их параметров приведен в документации Alertmanager.

  2. Проверьте конфигурацию Alertmanager:

    amtool check-config /etc/prometheus/alertmanager.yml
    

    В выводе команды не должно быть ошибок.

  3. Перезапустите Alertmanager:

    sudo systemctl restart prometheus-alertmanager
    

После настройки каналов уведомлений система оповещений готова к использованию.