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

Правила оповещений помогают автоматически выявлять неисправности и деградацию компонентов платформы.

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

  • Сигнал оповещения (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;

  • использование памяти и процессора контейнерами;

  • заполнение постоянных томов.

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

  1. Создайте файл 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" и названия групп правил не связаны с пространством имен и могут остаться без изменений.

  2. Создайте ресурс PrometheusRule:

    kubectl apply -f aa-monitoring-rules.yaml
    
  3. Проверьте создание ресурса:

    kubectl -n monitoring get prometheusrule aa-monitoring-rules
    

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

После создания PrometheusRule убедитесь, что Prometheus загрузил правила.

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

  1. Настройте локальную переадресацию порта к Prometheus:

    kubectl -n monitoring port-forward svc/kube-prometheus-stack-prometheus 9090:9090
    
  2. Откройте графическую консоль Prometheus:

    http://localhost:9090
    
  3. Перейдите в раздел Status ‣ Rules.

  4. Убедитесь, что Prometheus отображает следующие группы правил без ошибок:

    • astra-automation-availability;

    • astra-automation-controller;

    • astra-automation-kubernetes.

  5. Перейдите в раздел Alerts.

  6. Убедитесь, что Prometheus показывает правила в списке сигналов оповещения.

Проверка состояния Alertmanager#

Alertmanager получает сработавшие сигналы оповещения от Prometheus, группирует их, подавляет повторы и доставляет уведомления.

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

  1. Проверьте ресурс Alertmanager:

    kubectl -n monitoring get alertmanager
    
  2. Проверьте Alertmanager pod:

    kubectl -n monitoring get pods \
      -l app.kubernetes.io/name=alertmanager
    
  3. Настройте локальную переадресацию порта:

    kubectl -n monitoring port-forward svc/kube-prometheus-stack-alertmanager 9093:9093
    
  4. Откройте графическую консоль Alertmanager:

    http://localhost:9093
    
  5. Убедитесь, что графическая консоль открывается без ошибок.

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

После проверки правил подключите каналы уведомлений, принятые в организации. Alertmanager поддерживает разные способы доставки уведомлений, включая электронную почту, HTTP-приемники уведомлений и интеграции с внешними системами уведомлений.