Настройка оповещений#
Правила оповещений помогают автоматически выявлять неисправности и деградацию компонентов платформы.
Для настройки оповещений используются два связанных термина:
Сигнал оповещения (alert) фиксирует событие внутри системы мониторинга: Prometheus создает его при выполнении условия правила и передает в Alertmanager.
Уведомление (notification) – это сообщение для администратора или дежурной команды: Alertmanager формирует его из одного или нескольких сигналов оповещения и отправляет через настроенный канал связи.
Иными словами, сигнал оповещения нужен для автоматической обработки события в системе мониторинга, а уведомление – для доставки информации человеку.
В Kubernetes настройте правила оповещений с помощью ресурса PrometheusRule.
Prometheus Operator обнаруживает такие ресурсы и передает описанные правила в Prometheus.
Правило оповещения содержит выражение PromQL, длительность выполнения условия, уровень важности и текстовое описание. Если условие выполняется дольше указанного времени, Prometheus формирует сигнал оповещения и передает его в Alertmanager.
Создание PrometheusRule#
Для настройки правил оповещений создайте ресурс PrometheusRule.
Пример ниже содержит правила для контроля следующих параметров:
доступность Automation Controller, Private Automation Hub, Gateway и Event-Driven Automation;
состояние заданий и емкости Automation Controller;
очередь событий Redis;
состояние подов в пространстве имен Astra Automation;
использование памяти и процессора контейнерами;
заполнение постоянных томов.
Для создания правил выполните следующие действия:
Создайте файл
aa-monitoring-rules.yamlсо следующим содержимым:--- apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: aa-monitoring-rules namespace: monitoring labels: release: kube-prometheus-stack spec: groups: - name: astra-automation-availability rules: - alert: AAControllerMetricsDown expr: up{component="controller",platform="astra_automation"} == 0 for: 2m labels: severity: critical service: astra-automation annotations: summary: Точка доступа метрик Automation Controller недоступна description: Prometheus не может получить метрики Controller больше 2 минут. - alert: AAHubMetricsDown expr: up{component="hub",platform="astra_automation"} == 0 for: 2m labels: severity: warning service: astra-automation annotations: summary: Точка доступа метрик Automation Hub недоступна description: Проверьте сервис Hub, готовность подов, ресурс входящего доступа и TLS. - alert: AAGatewayProbeDown expr: probe_success{job=~".*aa-gateway.*"} == 0 for: 2m labels: severity: critical service: astra-automation annotations: summary: Проверка состояния Gateway завершилась ошибкой description: Проверка Gateway через blackbox_exporter завершается ошибкой больше 2 минут. - alert: AAEDAProbeDown expr: probe_success{job=~".*aa-eda.*"} == 0 for: 2m labels: severity: critical service: astra-automation annotations: summary: Проверка состояния EDA завершилась ошибкой description: Проверка EDA через blackbox_exporter завершается ошибкой больше 2 минут. - name: astra-automation-controller rules: - alert: AAControllerLowRemainingCapacity expr: awx_instance_remaining_capacity / awx_instance_capacity < 0.1 for: 10m labels: severity: warning service: astra-automation annotations: summary: Низкая свободная емкость Controller description: Узел {{ $labels.hostname }} использует больше 90% емкости. - alert: AAControllerNoRemainingCapacity expr: awx_instance_remaining_capacity <= 0 for: 5m labels: severity: critical service: astra-automation annotations: summary: Нет свободной емкости Controller description: Узел {{ $labels.hostname }} не имеет свободной емкости больше 5 минут. - alert: AAControllerPendingJobsHigh expr: awx_pending_jobs_total > 20 for: 10m labels: severity: warning service: astra-automation annotations: summary: Высокое число ожидающих заданий description: "Количество ожидающих заданий: {{ $value }}." - alert: AAControllerRedisEventQueueHigh expr: callback_receiver_events_queue_size_redis > 10000 for: 5m labels: severity: warning service: astra-automation annotations: summary: Очередь событий Redis увеличивается description: В очереди Redis находится {{ $value }} событий. - alert: AAControllerEventProcessingLagHigh expr: callback_receiver_event_processing_avg_seconds > 5 for: 10m labels: severity: warning service: astra-automation annotations: summary: Высокая задержка обработки событий description: Среднее время обработки события составляет {{ $value }} секунд. - alert: AAControllerCallbackBatchErrors expr: increase(callback_receiver_batch_events_errors[10m]) > 0 for: 1m labels: severity: warning service: astra-automation annotations: summary: Ошибки пакетной записи событий description: За последние 10 минут зафиксированы ошибки записи событий. - name: astra-automation-kubernetes rules: - alert: AANamespacePodsNotReady expr: | sum by (namespace, pod) ( kube_pod_status_ready{namespace="astra-automation",condition="false"} ) > 0 for: 10m labels: severity: warning service: astra-automation annotations: summary: В пространстве имен Astra Automation есть неготовые поды description: Под {{ $labels.pod }} не готов больше 10 минут. - alert: AAPodCrashLooping expr: | increase(kube_pod_container_status_restarts_total{namespace="astra-automation"}[15m]) > 3 for: 5m labels: severity: warning service: astra-automation annotations: summary: Под Astra Automation часто перезапускается description: Под {{ $labels.pod }}, контейнер {{ $labels.container }} перезапускался больше 3 раз за 15 минут. - alert: AAPodMemoryNearLimit expr: | container_memory_working_set_bytes{namespace="astra-automation",container!="",image!=""} / on(namespace, pod, container) group_left() kube_pod_container_resource_limits{namespace="astra-automation",resource="memory"} > 0.9 for: 10m labels: severity: warning service: astra-automation annotations: summary: Контейнер близок к ограничению памяти description: "{{ $labels.pod }}/{{ $labels.container }} использует больше 90% ограничения памяти." - alert: AAPodCPUThrottlingHigh expr: | rate(container_cpu_cfs_throttled_periods_total{namespace="astra-automation",container!="",image!=""}[5m]) / rate(container_cpu_cfs_periods_total{namespace="astra-automation",container!="",image!=""}[5m]) > 0.25 for: 15m labels: severity: warning service: astra-automation annotations: summary: Высокое ограничение процессорного времени description: "{{ $labels.pod }}/{{ $labels.container }} ограничивается по процессорному времени больше 25% периодов." - alert: AAPersistentVolumeAlmostFull expr: | kubelet_volume_stats_available_bytes{namespace="astra-automation"} / kubelet_volume_stats_capacity_bytes{namespace="astra-automation"} < 0.1 for: 10m labels: severity: warning service: astra-automation annotations: summary: PVC почти заполнен description: PVC {{ $labels.persistentvolumeclaim }} свободно меньше 10%.
Если платформа Astra Automation установлена не в пространстве имен
astra-automation, замените значение только в поляхnamespace="astra-automation". Значенияservice: astra-automation,platform="astra_automation"и названия групп правил не связаны с пространством имен и могут остаться без изменений.Создайте ресурс
PrometheusRule:kubectl apply -f aa-monitoring-rules.yaml
Проверьте создание ресурса:
kubectl -n monitoring get prometheusrule aa-monitoring-rules
Проверка правил#
После создания PrometheusRule убедитесь, что Prometheus загрузил правила.
Для проверки выполните следующие действия:
Настройте локальную переадресацию порта к Prometheus:
kubectl -n monitoring port-forward svc/kube-prometheus-stack-prometheus 9090:9090
Откройте графическую консоль Prometheus:
http://localhost:9090
Перейдите в раздел .
Убедитесь, что Prometheus отображает следующие группы правил без ошибок:
astra-automation-availability;astra-automation-controller;astra-automation-kubernetes.
Перейдите в раздел .
Убедитесь, что Prometheus показывает правила в списке сигналов оповещения.
Проверка состояния Alertmanager#
Alertmanager получает сработавшие сигналы оповещения от Prometheus, группирует их, подавляет повторы и доставляет уведомления.
Для проверки выполните следующие действия:
Проверьте ресурс Alertmanager:
kubectl -n monitoring get alertmanager
Проверьте Alertmanager pod:
kubectl -n monitoring get pods \ -l app.kubernetes.io/name=alertmanager
Настройте локальную переадресацию порта:
kubectl -n monitoring port-forward svc/kube-prometheus-stack-alertmanager 9093:9093
Откройте графическую консоль Alertmanager:
http://localhost:9093
Убедитесь, что графическая консоль открывается без ошибок.
Настройка каналов уведомлений#
После проверки правил подключите каналы уведомлений, принятые в организации. Alertmanager поддерживает разные способы доставки уведомлений, включая электронную почту, HTTP-приемники уведомлений и интеграции с внешними системами уведомлений.