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

Мониторинг и метрики

AppSec.AIGate экспортирует метрики в формате Prometheus. Этот раздел — как настроить их сбор, визуализировать в Grafana, подключить алерты и читать ключевые показатели. Полный перечень метрик — Справочник: Метрики.

Как это устроено

Поток метрик: каждый сервис → Prometheus → Grafana, с ветвлением Prometheus к правилам алертов

Каждый сервис отдаёт метрики на эндпоинте GET /metrics своего основного HTTP-порта (см. Таблица портов). Пробы (/healthz, /readyz) и сам /metrics при успешном ответе не логируются.

Метрики главного контура (решения, детекторы, PII, риск, накладные расходы) сосредоточены на API Gateway — он видит каждый запрос. Поэтому базовая картина доступна, даже если собирать метрики только с него.

Метрики не содержат чувствительных данных

В метках — только ограниченные категории (действие, тип детектора, тип PII, severity). Ни текста запросов, ни значений ПДн в метриках нет.

Сбор в Prometheus

В поставке есть готовый конфиг compose/prometheus.yml. Минимально достаточно собирать метрики с API Gateway и PDP — там весь главный контур. Цели указываются по адресу сервиса в сети Docker (имя сервиса + внутренний порт контейнера из колонки «Порт контейнера» в Таблице портов):

global:
  scrape_interval: 15s
  evaluation_interval: 15s

rule_files:
  - monitoring/risk_alerts.yml

scrape_configs:
  - job_name: 'api-gateway'        # решения, PII, риск, overhead, стриминг
    static_configs: [{ targets: ['api-gateway:8080'] }]
    metrics_path: '/metrics'
  - job_name: 'pdp'                # риск (решения PDP)
    static_configs: [{ targets: ['pdp:8080'] }]
    metrics_path: '/metrics'
  - job_name: 'profiles-registry'
    static_configs: [{ targets: ['profiles-registry:8000'] }]
  - job_name: 'admin-api'
    static_configs: [{ targets: ['admin-api:8001'] }]
  - job_name: 'event-exporter'
    static_configs: [{ targets: ['event-exporter:8090'] }]

Внутренний порт ≠ порт на хосте

В сети Docker используйте порт контейнера, а не опубликованный на хост. Например, API Gateway и PDP слушают 8080 внутри сети (на хосте — 8085 и 8086); PII Detector — 8082 внутри (на хосте 8084). Сверяйтесь с колонкой «Порт контейнера» в Таблице портов.

Сбор метрик детекторов

Чтобы видеть внутренние метрики самих детекторов (раздел «Метрики детекторов» в Справочнике), добавьте задания на их адреса в сети:

Сервис Цель (в сети Docker)
Content Safety content-safety:8088
PII Detector pii-detector:8082
Content Policy content-policy-service:8089
Tokenization Vault tokenization-vault:8092
Request Normalizer request-normalizer:8081
Threat Detector threat-detector:8090
Translation Service translation-service:8087

В Kubernetes сбор обычно настраивается через ServiceMonitor.

Дашборды Grafana

  1. Добавьте Prometheus как источник данных (Data source), URL — http://prometheus:9090.
  2. Импортируйте готовые дашборды (Dashboards → Import → Upload JSON) из каталога compose/monitoring/:
Дашборд Файл Содержимое
LLM Firewall — Overview llm_firewall_overview.json Сводный: трафик и решения, PII/DLP, детекторы и угрозы, производительность (overhead и тайминги стадий), надёжность. 22 панели, 5 секций
Risk Analytics risk_analytics_dashboard.json Распределение риска и severity, would-block
Tokenization Vault tokenization-vault/grafana/dashboard.json Активные токены, латентность, здоровье очистки

При импорте Overview-дашборда выберите свой Prometheus в качестве источника (${DS_PROMETHEUS}).

Алерты

Правила — compose/monitoring/risk_alerts.yml (подключаются через rule_files:). Две группы:

Риск:

  • CriticalRiskSpike — доля решений уровня CRITICAL выше 5 %.
  • MonitorModeWouldBlockSpike — много would-block в наблюдательном режиме.
  • RiskScoreMedianUnusuallyHigh — медиана риска выше 0.4.

Бизнес:

  • BlockRateSpike — доля блокировок выше 20 % (возможна атака или ошибка конфигурации).
  • FailSafeActivations — срабатывание fail-safe (недоступна зависимость).
  • UpstreamFailureSpike — рост сбоев вызова upstream-LLM.
  • GatewayOverheadHigh — накладные расходы шлюза (p95) выше 500 мс.
  • PIIBlockSurge — всплеск блокировок из-за ПДн (утечка чувствительных данных).

Проверка корректности правил: promtool check rules monitoring/risk_alerts.yml.

Как читать ключевые метрики (PromQL)

# Накладные расходы шлюза p50/p95/p97 — «firewall не тормозит»
histogram_quantile(0.97, sum(rate(gateway_overhead_seconds_bucket[5m])) by (le))

# Доля гейта в общем времени запроса
sum(rate(gateway_overhead_seconds_sum[5m]))
  / sum(rate(http_request_duration_seconds_sum{surface="chat"}[5m]))

# Доля блокировок и их причины
sum(rate(gateway_decisions_total{action="BLOCK"}[5m])) / sum(rate(gateway_decisions_total[5m]))
topk(5, sum(increase(gateway_blocks_by_reason_total[1h])) by (reason))

# DLP / 152-ФЗ: объём ПДн по типам и доля заблокированного
sum(rate(gateway_pii_entities_detected_total[5m])) by (entity_type)
sum(rate(gateway_blocks_by_reason_total{reason="pii"}[5m]))

# Активность и ошибки детекторов
sum(rate(gateway_detector_results_total{outcome="triggered"}[5m])) by (detector)
sum(rate(gateway_detector_results_total{outcome="error"}[5m])) by (detector)

# Распределение риска и severity
histogram_quantile(0.95, sum(rate(gateway_risk_score_bucket[5m])) by (le))
sum(rate(gateway_risk_severity_total[5m])) by (severity)

# Надёжность
sum(rate(gateway_fail_safe_invocations_total[5m])) by (stage)
sum(rate(llm_firewall_upstream_failures_total[5m])) by (failure_class)

Связь метрики с конкретным запросом

Метрики агрегированы. Чтобы разобрать конкретный запрос, используйте структурные логи: API Gateway пишет на каждый запрос событие request_timings с разбивкой стадий и trace_id — по нему запрос коррелируется с журналом и трейсом.

Дополнительная информация