← Назад к вопросам

Какой системой генерируется trace ID?

2.0 Middle🔥 181 комментариев
#Другое

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Генерация Trace ID в распределённых системах

Trace ID генерируется инструментарием наблюдаемости (Observability) — специальными системами распределённой трассировки.

Основные системы

Jaeger — самая популярная в микросервисной архитектуре:

from jaeger_client import Config

config = Config(
    config={
        sampler: {type: const, param: 1},
        logging: True,
        local_agent: {reporting_host: localhost, reporting_port: 6831}
    },
    service_name=my-service
)
jaeger_tracer = config.initialize_tracer()

OpenTelemetry — современный стандарт:

from opentelemetry import trace, SpanAttributes
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.exporter.jaeger.thrift import JaegerExporter

jaeger_exporter = JaegerExporter(agent_host_name=localhost)
trace.set_tracer_provider(TracerProvider(resource=Resource()))

tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("request") as span:
    span.set_attribute("user_id", 123)

Как генерируется Trace ID?

UUID/Correlation ID:

  • Генерируется при первом запросе к системе
  • Передаётся в заголовках X-Trace-ID или traceparent
  • Может быть UUID, большое число или специальный формат

W3C Trace Context стандарт:

traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01
                 ↓         ↓          ↓          ↓
             version   trace-id   span-id    flags

Практическая реализация

В FastAPI:

from fastapi import FastAPI, Request
import uuid

app = FastAPI()

@app.middleware("http")
async def trace_middleware(request: Request, call_next):
    trace_id = request.headers.get("X-Trace-ID") or str(uuid.uuid4())
    request.state.trace_id = trace_id
    response = await call_next(request)
    response.headers["X-Trace-ID"] = trace_id
    return response

В Django:

import uuid
from django.utils.deprecation import MiddlewareMixin

class TraceIDMiddleware(MiddlewareMixin):
    def process_request(self, request):
        request.trace_id = request.META.get(HTTP_X_TRACE_ID) or str(uuid.uuid4())
    
    def process_response(self, request, response):
        response[X-Trace-ID] = request.trace_id
        return response

Использование в логировании

Структурированное логирование:

import logging
import structlog

logger = structlog.get_logger()
logger.info("user_registered", trace_id=trace_id, user_id=user.id)

# Вывод:
# {"event": "user_registered", "trace_id": "abc123", "user_id": 456}

Цель Trace ID

  • Отслеживание запроса через все микросервисы
  • Корреляция логов разных сервисов
  • Debug в production
  • Performance анализ (от входа до выхода)
  • Ошибки — быстро найти в каких сервисах они произошли
Какой системой генерируется trace ID? | PrepBro