Настройка оповещений#
Сбор метрик дает информацию о состоянии платформы, но сам по себе мониторинг не гарантирует своевременное обнаружение проблем. Для автоматического выявления неисправностей используйте правила оповещений Prometheus.
При настройке оповещений используются два связанных термина:
Сигнал оповещения (alert) фиксирует событие внутри системы мониторинга: Prometheus создает его при выполнении условия правила и передает в Alertmanager.
Уведомление (notification) – это сообщение для администратора или дежурной команды: Alertmanager формирует его из одного или нескольких сигналов оповещения и отправляет через настроенный канал связи.
Иными словами, сигнал оповещения нужен для автоматической обработки события в системе мониторинга, а уведомление – для доставки информации человеку.
Правило оповещения представляет собой выражение PromQL, которое Prometheus выполняет периодически. Когда условие правила выполняется, Prometheus формирует сигнал оповещения и передает его в Alertmanager для дальнейшей обработки и отправки уведомлений.
Подключение Alertmanager#
Убедитесь, что Prometheus передает сигналы оповещения в Alertmanager:
Проверьте наличие следующей конфигурации в файле
/etc/prometheus/prometheus.yml:alerting: alertmanagers: - static_configs: - targets: - 127.0.0.1:9093
Перезапустите Prometheus в случае изменения файла
/etc/prometheus/prometheus.yml:sudo systemctl restart prometheus
Подготовка каталога правил#
Для хранения правил используйте отдельный каталог. Выполните следующие действия для его подготовки:
Создайте каталог:
sudo mkdir -p /etc/prometheus/rules
Добавьте подключение правил в файл
/etc/prometheus/prometheus.yml:rule_files: - /etc/prometheus/rules/*.yml
Создайте файл правил с базовой структурой:
sudo tee /etc/prometheus/rules/aa-alerts.yml >/dev/null <<'YAML' --- groups: - name: astra-automation-vm rules: [] YAML
Добавьте в файл правил необходимые правила. В примерах ниже приведены элементы списка
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 минут обнаружены ошибки импорта коллекций.
Проверка правил#
После добавления правил выполните проверку конфигурации:
Проверьте файл правил:
promtool check rules /etc/prometheus/rules/aa-alerts.yml
Перезапустите Prometheus:
sudo systemctl restart prometheus
Откройте графическую консоль Prometheus:
http://<monitoring_host>:9090
Перейдите в раздел .
Убедитесь, что все правила успешно загружены.
Настройка каналов уведомлений#
После проверки правил подключите каналы уведомлений, принятые в организации.
Alertmanager поддерживает разные способы доставки уведомлений, включая электронную почту, HTTP-приемники уведомлений и интеграции с внешними системами уведомлений.
Маршрутизация сигналов оповещения задается в файле /etc/prometheus/alertmanager.yml: секция route определяет правила распределения сигналов по получателям, а секция receivers – каналы доставки.
Для настройки канала уведомлений выполните следующие действия на узле мониторинга:
Опишите маршрут и получателя в файле
/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.
Проверьте конфигурацию Alertmanager:
amtool check-config /etc/prometheus/alertmanager.yml
В выводе команды не должно быть ошибок.
Перезапустите Alertmanager:
sudo systemctl restart prometheus-alertmanager
После настройки каналов уведомлений система оповещений готова к использованию.