Операции
Документ описывает журналы выполнения, журналы трафика, метрики, наблюдаемость и admin/debug-эндпоинты.
Системные эндпоинты
Всегда подключены:
GET /healthGET | POST /ping
Только в DEV:
GET /logs/{last_n_lines}GET /logs/streamGET /logs/html
Эндпоинты /logs* отключены в PROD.
Журналы выполнения
Журналы выполнения — это журналы процесса. Они пишутся в stdout и настроенный файл журнала.
Частые настройки:
GPT2GIGA_LOG_LEVEL=INFO
GPT2GIGA_LOG_FILENAME=gpt2giga.log
GPT2GIGA_LOG_MAX_SIZE=10485760
Не используйте DEBUG в production. Отладочные логи могут содержать чувствительный операционный контекст даже при включённом маскировании.
Метрики
Метрики, совместимые с Prometheus, выключены по умолчанию:
GPT2GIGA_METRICS_ENABLED=False
GPT2GIGA_METRICS_PATH=/metrics
Локальное включение:
GPT2GIGA_METRICS_ENABLED=True
GPT2GIGA_METRICS_PATH=/metrics
Если включена аутентификация по API-ключу, передавайте Authorization: Bearer <GPT2GIGA_API_KEY> или x-api-key.
Метрики не содержат содержимого промптов и ответов, API-ключей, идентификаторов запросов и трейсов или необработанных полезных нагрузок. Метки ограничены конечным набором операционных полей: protocol, route, method, status, lifecycle, provider, model.
Базовые серии:
gpt2giga_requests_totalgpt2giga_request_duration_secondsgpt2giga_upstream_duration_secondsgpt2giga_upstream_errors_totalgpt2giga_tokens_input_totalgpt2giga_tokens_output_totalgpt2giga_stream_disconnects_totalgpt2giga_traffic_log_dropped_total
Журналы трафика
Журналы трафика — это структурированные записи трафика запросов и ответов. По умолчанию выключены:
GPT2GIGA_TRAFFIC_LOG_ENABLED=False
GPT2GIGA_TRAFFIC_LOG_SINK=noop
Локальная JSONL-проверка:
GPT2GIGA_TRAFFIC_LOG_ENABLED=True
GPT2GIGA_TRAFFIC_LOG_SINK=jsonl
GPT2GIGA_TRAFFIC_LOG_JSONL_PATH=traffic_logs.jsonl
Надёжный бэкенд в Postgres:
GPT2GIGA_TRAFFIC_LOG_ENABLED=True
GPT2GIGA_TRAFFIC_LOG_SINK=postgres
GPT2GIGA_TRAFFIC_LOG_POSTGRES_DSN=postgresql://user:password@localhost:5432/gpt2giga
Postgres плюс зеркало OpenSearch:
GPT2GIGA_TRAFFIC_LOG_ENABLED=True
GPT2GIGA_TRAFFIC_LOG_SINKS=postgres,opensearch
GPT2GIGA_TRAFFIC_LOG_POSTGRES_DSN=postgresql://user:password@localhost:5432/gpt2giga
GPT2GIGA_OPENSEARCH_URL=http://localhost:9200
Захват содержимого включается по запросу и проходит маскирование:
GPT2GIGA_TRAFFIC_LOG_CAPTURE_CONTENT=False
GPT2GIGA_TRAFFIC_LOG_REDACT_SENSITIVE=True
Держите захват содержимого выключенным, пока не утверждены политики хранения, срока хранения, маскирования и доступа.
Admin API журналов трафика
Admin-эндпоинты выключены по умолчанию:
GPT2GIGA_ADMIN_API_ENABLED=False
Включение с отдельным admin-ключом:
GPT2GIGA_ADMIN_API_ENABLED=True
GPT2GIGA_ADMIN_API_KEY="<strong-admin-secret>"
GPT2GIGA_TRAFFIC_LOG_SINK=postgres
GPT2GIGA_TRAFFIC_LOG_POSTGRES_DSN=postgresql://user:password@localhost:5432/gpt2giga
Варианты заголовков авторизации:
x-admin-api-key: <secret>Authorization: Bearer <secret>
Эндпоинты:
GET /_admin/logsGET /_admin/logs/{id}GET /_admin/logs/{id}/requestGET /_admin/logs/{id}/responseGET /_admin/logs/tailGET /_admin/logs/export.ndjsonGET /_admin/logs/export.csvPOST /_admin/logs/retention/purgePOST /_admin/logs/{id}/replayPOST /_admin/logs/{id}/redact
Повтор (replay) требует:
GPT2GIGA_REPLAY_ENABLED=True
API отладочной трансляции
Эндпоинты отладочной трансляции предназначены для локальной отладки и защищённых admin-сценариев:
GPT2GIGA_DEBUG_TRANSLATE_ENABLED=True
GPT2GIGA_ADMIN_API_KEY="<strong-admin-secret>"
Основной эндпоинт:
POST /_debug/translate
Короткие эндпоинты:
POST /_debug/translate/openai-to-normalizedPOST /_debug/translate/anthropic-to-normalizedPOST /_debug/translate/normalized-to-gigachatPOST /_debug/translate/gigachat-to-openai
Поддерживаемые семейства полезных нагрузок: openai, anthropic, normalized, gigachat, в зависимости от направления.
Как эти форматы проходят через внутренний нормализованный контракт, описано в Нормализованных сообщениях.
Phoenix / OpenTelemetry
Наблюдаемость через Phoenix выключена по умолчанию:
GPT2GIGA_OBSERVABILITY_ENABLED=False
GPT2GIGA_OBSERVABILITY_BACKEND=phoenix
PHOENIX_COLLECTOR_ENDPOINT=http://localhost:4317
PHOENIX_PROJECT_NAME=gpt2giga
Включайте после установки необязательного пакета phoenix или через профиль Compose для Phoenix.
Атрибуты полезной нагрузки LLM требуют двойного включения:
GPT2GIGA_OBSERVABILITY_CAPTURE_CONTENT=True
GPT2GIGA_OBSERVABILITY_CAPTURE_MESSAGES=True
GPT2GIGA_OBSERVABILITY_CAPTURE_TOOL_ARGS=False
GPT2GIGA_OBSERVABILITY_CAPTURE_RESPONSES=True
GPT2GIGA_OBSERVABILITY_REDACTION_ENABLED=True
Журналы трафика и спаны Phoenix связываются через идентификаторы шлюза:
request_id, trace_id, protocol, route, метаданные модели. Для LLM-маршрутов
Phoenix получает один корневой спан на формат: OpenAI-Completions для Chat
Completions, OpenAI-Responses для Responses API, Anthropic-Messages для
Anthropic Messages, Gemini-Content для Gemini GenerateContent и Embeddings
для OpenAI Embeddings. Вехи потока (streaming milestones) прикрепляются к
соответствующему корневому спану как события спана. Для не-LLM-маршрутов используется
один спан жизненного цикла gpt2giga.request.
Для фильтрации и группировки по совместимому формату API спаны модели получают
атрибут gpt2giga.api_format: chat_completions, responses, messages,
generate_content или embeddings. Responses с состоянием дополнительно получают
session.id и
conversation.id из GigaChat thread_id; если идентификатор потока вышестоящего сервиса ещё не
доступен, используется previous_response_id без префикса resp_.
Время начала спана OpenTelemetry берётся из RequestContext.started_at шлюза,
поэтому Latency в Phoenix отражает полное время запроса/потока, а не только
время финальной отправки спана наблюдаемости. То же значение дополнительно
пишется в атрибут latency_ms.
Спаны LLM выставляют явный статус OpenTelemetry (OK или ERROR) и дублируют
его в безопасных атрибутах status / llm.response.status. Использование токенов
пишется как поля OpenInference llm.token_count.* и как псевдонимы шлюза
input_tokens, output_tokens, total_tokens.
Видимость инструментов по умолчанию безопасная: Phoenix получает llm.tools.count,
llm.tools.names, llm.tool_calls.count, llm.tool_calls.names, а также
события llm.tool_call без аргументов. Аргументы вызовов инструментов и полные схемы
инструментов пишутся только при двойном включении:
GPT2GIGA_OBSERVABILITY_CAPTURE_CONTENT=True и
GPT2GIGA_OBSERVABILITY_CAPTURE_TOOL_ARGS=True; перед отправкой они проходят
маскирование.
Спаны Phoenix также получают безопасную классификацию вызывающей стороны из входящих заголовков:
caller.name: напримерswagger-ui,redoc-ui,openai-python,anthropic-compatible,claude-code,codex,qwen-code,browser;caller.category:ui,sdk,agent,browser,http_clientилиunknown;caller.client_family:openaiилиanthropic, когда это можно вывести из заголовков SDK илиUser-Agent;caller.sdk,caller.agent,caller.ui: более точные подтипы, когда они известны.
Подробный объект дублируется в annotations.caller, чтобы в Phoenix можно было
открыть структурированный контекст без включения захвата полезной нагрузки. Для Swagger UI
источник определяется по Referer: .../docs, для ReDoc — по .../redoc; необработанное
содержимое промптов и ответов в annotations не добавляется.
Термины и проектные ограничения описаны в Логировании и наблюдаемости. Чек-лист для добавления новых провайдеров/протоколов и связанных изменений наблюдаемости: Добавление провайдера или протокола.