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

Мониторинг

Стек мониторинга не входит в 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:

OTEL_EXPORTER_OTLP_ENDPOINT=http://<хост-вашего-otlp-collector>:4317

Типичный трейс включает:

  1. Входящий HTTP-запрос на UI Gateway.
  2. Проксирование на целевой микросервис.
  3. Запрос к базе данных.
  4. Публикация сообщения в NATS.
  5. Обработка воркером.

Логи

Все микросервисы используют библиотеку 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