Мониторинг¶
Стек мониторинга не входит в compose-поставку
Вендорская compose-поставка содержит только продуктовые компоненты платформы и базовую инфраструктуру (PostgreSQL, NATS, Redis, MinIO). Полноценный стек мониторинга (Prometheus, Grafana, Jaeger, Elasticsearch+Kibana) не входит в поставку для пилотных проектов.
Микросервисы платформы готовы к интеграции с внешней инфраструктурой мониторинга — они экспортируют метрики Prometheus, трейсы OpenTelemetry и пишут структурированные логи в stdout. Для продуктивных развёртываний с встроенным стеком мониторинга используйте установку в Kubernetes.
Что экспортируют микросервисы¶
graph LR
subgraph MS_["Микросервисы AppSec.GenAI"]
MS[Все сервисы]
end
subgraph EXT["Внешняя инфраструктура заказчика (опционально)"]
PR[Prometheus]
JG[Jaeger / OTLP collector]
LOG[Любая система логов]
end
MS -->|/metrics<br/>HTTP scrape| PR
MS -->|OTLP gRPC| JG
MS -->|structlog JSON<br/>в stdout| LOG
classDef cluster fill:transparent,stroke:#888,stroke-width:1px
class MS_,EXT cluster
Метрики Prometheus¶
Каждый Python-микросервис экспортирует метрики на endpoint /metrics (тот же порт, что и REST API). Эти endpoints можно подключить к собственному Prometheus заказчика как scrape-таргеты.
Типовой набор метрик:
| Метрика | Тип | Описание |
|---|---|---|
http_requests_total |
Counter | Общее количество HTTP-запросов |
http_request_duration_seconds |
Histogram | Время обработки запросов |
db_pool_size |
Gauge | Размер пула подключений к БД |
db_pool_checked_out |
Gauge | Количество активных подключений |
nats_messages_published_total |
Counter | Опубликованные NATS-сообщения |
nats_messages_consumed_total |
Counter | Полученные NATS-сообщения |
Пример конфигурации Prometheus заказчика для сбора метрик с платформы:
scrape_configs:
- job_name: 'appsec-genai'
static_configs:
- targets:
- '<IP_СТЕНДА>:8001' # Model Management
- '<IP_СТЕНДА>:8002' # Scan Profile
- '<IP_СТЕНДА>:8003' # Results
- '<IP_СТЕНДА>:8004' # Scan Orchestrator
- '<IP_СТЕНДА>:8005' # Jailbreak Service
- '<IP_СТЕНДА>:8008' # CV Adversarial
- '<IP_СТЕНДА>:8009' # License Service
- '<IP_СТЕНДА>:8025' # ASR Adversarial
Трейсы OpenTelemetry¶
Микросервисы инструментированы OpenTelemetry. По умолчанию OTLP-экспорт не настроен на конкретный endpoint в compose-поставке — для отправки трейсов в свой OTLP-приёмник задайте в .env или непосредственно в docker-compose.yml:
Типичный трейс включает:
- Входящий HTTP-запрос на UI Gateway.
- Проксирование на целевой микросервис.
- Запрос к базе данных.
- Публикация сообщения в NATS.
- Обработка воркером.
Логи¶
Все микросервисы используют библиотеку structlog и пишут логи в stdout в формате JSON:
{
"timestamp": "2026-04-15T10:30:00.000Z",
"level": "info",
"service": "scan-orchestrator",
"event": "Scan started",
"scan_id": "550e8400-e29b-41d4-a716-446655440000",
"trace_id": "abc123def456"
}
Сбор логов из контейнеров стандартными средствами:
- Docker logging driver — настройте драйвер
fluentd,gelf,syslogилиjournaldвdocker-compose.ymlдля отправки логов в централизованную систему. - Filebeat / Fluent Bit / Vector — установите агента на хост и подключите его к Docker-сокету или каталогу логов Docker.
Мониторинг штатными средствами¶
Без подключения внешнего стека мониторинга базовая диагностика доступна напрямую через Docker и REST API сервисов.
Состояние контейнеров¶
# Состояние всех контейнеров
docker compose ps
# Использование ресурсов в реальном времени
docker stats --no-stream
# Логи конкретного сервиса
docker compose logs -f --tail 100 scan-orchestrator
# Логи с временными метками
docker compose logs -f --timestamps model-management
Healthcheck-эндпоинты¶
# Инфраструктура
curl -s http://localhost:8222/healthz | jq . # NATS Node 1
curl -s http://localhost:9000/minio/health/live # MinIO
# Микросервисы
curl -s http://localhost:8001/healthz | jq . # Model Management
curl -s http://localhost:8002/healthz | jq . # Scan Profile
curl -s http://localhost:8003/healthz | jq . # Results
curl -s http://localhost:8004/healthz | jq . # Scan Orchestrator
curl -s http://localhost:8005/healthz | jq . # Jailbreak Service
curl -s http://localhost:8008/healthz | jq . # CV Adversarial
curl -s http://localhost:8009/healthz | jq . # License Service
curl -s http://localhost:8025/healthz | jq . # ASR Adversarial
Мониторинг NATS JetStream¶
# Состояние кластера
curl -s http://localhost:8222/varz | jq '{server_name, version, connections, mem}'
# Информация о JetStream
curl -s http://localhost:8222/jsz | jq '{streams, consumers, messages, bytes}'
# Список потоков и их состояние
curl -s http://localhost:8222/jsz?streams=true | jq '.streams[] | {name, messages, bytes}'
Мониторинг PostgreSQL и Redis¶
# PostgreSQL: активные подключения
docker exec postgres psql -U postgres -c "SELECT count(*) FROM pg_stat_activity;"
# PostgreSQL: размер БД
docker exec postgres psql -U postgres -c "SELECT pg_size_pretty(pg_database_size('genai'));"
# Redis: статус
docker exec redis redis-cli info server
# Redis: использование памяти
docker exec redis redis-cli info memory | grep used_memory_human
# Redis: количество ключей по базам
docker exec redis redis-cli info keyspace