Мониторинг 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.
Атаки не отображаются в Консоли управления¶
-
Проверьте, что для 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 с тем же хостом. -
Проверьте, что правила загружены и запросы передаются в постаналитику: метрики
wallarm_proton_instances{status="success"},wallarm_tnt_errors,wallarm_requests_lost. -
Проверьте выгрузку атак из постаналитики:
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.