Перейти к содержанию

Мониторинг Ingress‑контроллера

Новый Ingress‑контроллер

Ingress‑контроллер Вебмониторэкс построен на F5 NGINX Ingress Controller (open source). Предыдущая версия контроллера была построена на Community Ingress‑контроллере NGINX (ingress-nginx), поддержка которого прекращена сообществом Kubernetes в марте 2026 года.

Ingress‑контроллер Вебмониторэкс предоставляет два набора метрик в формате Prometheus:

Метрики Где доступны Как включить
Метрики Ingress‑контроллера и NGINX (соединения, перезагрузки конфигурации, ресурсы Ingress) порт 9113, путь /metrics включены по умолчанию (prometheus.create)
Метрики ноды Вебмониторэкс (обработанные запросы, атаки, блокировки, состояние правил и постаналитики) порт 18080, путь /wallarm-metrics Service для сбора: controller.wmx.metrics.service.create

Кроме того, состояние нод отображается в Консоли управления Вебмониторэкс → Ноды.

Сбор метрик ноды

Создайте Service для метрик ноды:

controller:
  wmx:
    metrics:
      service:
        create: true
        annotations:
          prometheus.io/scrape: "true"
          prometheus.io/path: /wallarm-metrics
          prometheus.io/port: "18080"

Аннотации prometheus.io/* используются Prometheus с обнаружением сервисов по аннотациям. Если используется Prometheus Operator, создайте ServiceMonitor:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: wmx-ingress-node
  namespace: <KUBERNETES_NAMESPACE>
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: wmx-ingress
      app.kubernetes.io/instance: <RELEASE_NAME>
  endpoints:
    - port: wmx-metrics
      path: /wallarm-metrics
      interval: 30s

Для метрик Ingress‑контроллера Helm‑чарт может создать Service и ServiceMonitor сам: параметры prometheus.service.create и prometheus.serviceMonitor.create.

Метрики ноды

Метрики являются счетчиками с момента запуска NGINX, если не указано иное. Значения относятся к одному pod'у Ingress‑контроллера.

Трафик и блокировки

Метрика Описание
wallarm_requests Обработанные запросы.
wallarm_attacks Запросы с признаками атак.
wallarm_blocked Заблокированные запросы.
wallarm_blocked_by_acl Запросы, заблокированные по спискам IP.
wallarm_blocked_by_session Запросы, заблокированные по сессии.
wallarm_acl_allow_list Запросы, пропущенные по белому списку IP.
wallarm_abnormal Запросы, обработка которых завершилась нештатно.
wallarm_time_detect_seconds Суммарное время анализа запросов.

Ошибки и ограничения

Метрика Описание
wallarm_tnt_errors Ошибки передачи запросов в постаналитику.
wallarm_requests_lost Запросы, не переданные в постаналитику. Данные об атаках в них не попадут в Консоль управления.
wallarm_overlimits_time Запросы, анализ которых превысил wallarm-process-timeout.
wallarm_softmemfaults Запросы, анализ которых превысил wallarm-request-memory-limit.
wallarm_memfaults Превышения лимита памяти правил (wallarm-general-ruleset-memory-limit).
wallarm_proton_errors Ошибки библиотеки анализа запросов, не связанные с памятью.
wallarm_segfaults Аварийные завершения рабочих процессов NGINX при анализе запросов.
wallarm_stalled_worker_time_seconds{pid} Время, в течение которого рабочий процесс NGINX не отвечает из‑за анализа запроса.

Правила обнаружения атак

Метрика Описание
wallarm_proton_instances{status} Рабочие процессы, загрузившие правила: success — успешно, fallback — работают в аварийном режиме без анализа, failed — с ошибкой.
wallarm_db_id, wallarm_pdb_ver, wallarm_db_apply_time Идентификатор, версия формата и время применения (Unix time) proton.db.
wallarm_custom_ruleset_id, wallarm_custom_ruleset_ver, wallarm_custom_ruleset_apply_time То же для индивидуального набора правил.
wallarm_lom_id, wallarm_lom_apply_time Устаревшие названия метрик индивидуального набора правил.
wallarm_startid Уникальный идентификатор запуска NGINX: меняется при перезапуске.

Ограничение количества запросов

Метрики wallarm_rate_limit_* описывают работу правил ограничения количества запросов: размер разделяемой памяти (shm_zone_size), количество отслеживаемых ключей (entries, buckets_count), задержанные (delayed) и отклоненные (exceeded) запросы, удаленные ключи (expired, removed) и ошибки выделения памяти (no_free_nodes).

Рекомендуемые оповещения

Условие Возможная причина
Рост wallarm_tnt_errors или wallarm_requests_lost Постаналитика недоступна или не справляется с нагрузкой; недостаточно памяти (controller.wmx.postanalytics.arena).
wallarm_proton_instances{status="fallback"} или {status="failed"} больше 0 Правила не загружены: трафик не анализируется. Проверьте синхронизацию с Вычислительным кластером.
time() - wallarm_custom_ruleset_apply_time больше 1 часа при изменении правил в Консоли управления Синхронизация правил не работает.
Рост wallarm_segfaults, wallarm_memfaults или wallarm_proton_errors Ошибки анализа запросов; обратитесь в поддержку.
Рост wallarm_overlimits_time Анализ отдельных запросов занимает больше wallarm-process-timeout.
Перезапуски контейнеров, pod'ы не в состоянии Ready См. Диагностика.

Диагностика

Команды ниже используют переменные:

NS=<KUBERNETES_NAMESPACE>
CONTROLLER=deploy/wmx-ingress-controller
POSTANALYTICS=deploy/wmx-ingress-wmx-postanalytics

Pod'ы не запускаются

kubectl -n $NS get pods
kubectl -n $NS describe pod <POD_NAME>

Pod'ы Ingress‑контроллера и постаналитики при запуске регистрируют ноду (init‑контейнер addnode). Проверьте журнал регистрации:

kubectl -n $NS logs $CONTROLLER -c addnode

Успешная регистрация завершается сообщением Installation finished. Частые причины ошибок: неверный токен, нет доступа к api.webmonitorx.ru, сертификат API не проходит проверку (certificate verify failed) — для API с сертификатом собственного удостоверяющего центра задайте controller.wmx.api.caSecret.

Ошибки синхронизации с Вычислительным кластером

Сервисы, которые синхронизируют данные с Вычислительным кластером (sync-ip-lists, sync-ip-lists-source, sync-sessions-lists, sync-antibot-data, syncnode, export-environment, sync-markers), при ошибке записывают ее в журнал и повторяют попытку через 5 минут:

ERROR sync-ip-lists-source exited with 1, next attempt in 300s

Ingress‑контроллер при этом продолжает работать: недоступность Вычислительного кластера или его файлов не останавливает pod'ы. Устраните причину по сообщению перед этой строкой, например:

  • Could not download IP lists from mmdb — нода не загрузила базу геолокации IP‑адресов, нужную для блокировки по странам, регионам и дата‑центрам. Адрес загрузки выдает API Вычислительного кластера; проверьте доступ из кластера к этому адресу (для облака — storage.yandexcloud.net). Ошибка incorrect header check (Zlib::DataError) означает, что вместо файла вернулась ошибка (страница прокси, ошибка хранилища): на on‑premise установке проверьте журнал сервиса ipfeeds-s3-proxy.
  • certificate verify failed — сертификат API не проходит проверку, см. controller.wmx.api.caSecret.

Остальные сервисы ноды при неустранимом сбое завершают свой контейнер, и Kubernetes перезапускает его: такие сбои видны по счетчику RESTARTS в kubectl get pods.

Атаки не отображаются в Консоли управления

  1. Проверьте, что для Ingress включен режим фильтрации: в сгенерированной конфигурации NGINX должна быть директива wallarm_mode:

    kubectl -n $NS exec $CONTROLLER -c wmx-ingress -- \
      grep -h wallarm_mode /etc/nginx/conf.d/<INGRESS_NAMESPACE>-<INGRESS_NAME>.conf
    

    Если файла нет, Ingress не принят контроллером: причина указана в событиях Ingress (kubectl describe ingress <INGRESS_NAME>). Проверьте класс Ingress (spec.ingressClassName) и наличие другого Ingress с тем же хостом.

  2. Проверьте, что правила загружены и запросы передаются в постаналитику: метрики wallarm_proton_instances{status="success"}, wallarm_tnt_errors, wallarm_requests_lost.

  3. Проверьте выгрузку атак из постаналитики:

    kubectl -n $NS logs $POSTANALYTICS -c export-attacks --tail=20
    

    При успешной выгрузке в журнале есть сообщения exported N requests.

Журналы сервисов ноды

Каждый сервис ноды работает в отдельном контейнере; журналы выводятся в стандартный вывод контейнера:

Контейнер Pod Назначение
wmx-ingress контроллер NGINX и Ingress‑контроллер
syncnode контроллер, постаналитика загрузка proton.db и индивидуального набора правил
sync-ip-lists, sync-ip-lists-source контроллер синхронизация списков IP и баз геолокации
sync-sessions-lists контроллер синхронизация заблокированных сессий
export-metrics, collectd контроллер выгрузка метрик в Вычислительный кластер
export-environment контроллер, постаналитика выгрузка сведений о версиях компонентов
tarantool постаналитика хранение запросов для постаналитики
export-attacks, export-counters, export-sessions-counters постаналитика выгрузка атак и статистики
brute-detect, weak-jwt-detect, cookies-monitoring, appstructure, sync-markers постаналитика обнаружение поведенческих атак, слабых JWT, проверка cookie, построение структуры API
kubectl -n $NS logs $CONTROLLER -c syncnode --tail=20

При обращении в техническую поддержку приложите журналы контейнеров addnode, syncnode, wmx-ingress и export-attacks, а также вывод kubectl -n $NS get pods -o wide.