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

Каждый сервис отдаёт метрики на эндпоинте 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¶
- Добавьте Prometheus как источник данных (Data source), URL —
http://prometheus:9090. - Импортируйте готовые дашборды (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 — по нему запрос
коррелируется с журналом и трейсом.
Дополнительная информация¶
- Справочник: Метрики — полный перечень метрик.
- Типы событий — события безопасности (отдельный канал).
- Экспорт событий в SIEM — пересылка событий наружу.
- Мониторинг и оптимизация GPU.