# Distributed Tracing ## Навигация - [🏠 Главная страница курса](../../../README.md) - [📚 Модуль 5](../README.md) --- ## Что такое Distributed Tracing **Distributed Tracing** — метод отслеживания запросов через распределенную систему. ## OpenTelemetry ```java @Configuration public class TracingConfig { @Bean public OpenTelemetry openTelemetry() { return OpenTelemetrySdk.builder() .setTracerProvider( SdkTracerProvider.builder() .addSpanProcessor(BatchSpanProcessor.builder( JaegerGrpcSpanExporter.builder() .setEndpoint("http://jaeger:14250") .build() ).build()) .build() ) .build(); } } @Service public class OrderService { private final Tracer tracer; public OrderService(OpenTelemetry openTelemetry) { this.tracer = openTelemetry.getTracer("order-service"); } public Order createOrder(CreateOrderRequest request) { Span span = tracer.spanBuilder("create-order") .setAttribute("customer.id", request.getCustomerId()) .setAttribute("order.value", request.getTotalValue().doubleValue()) .startSpan(); try (Scope scope = span.makeCurrent()) { // бизнес-логика Order order = processOrder(request); span.setStatus(StatusCode.OK); span.setAttribute("order.id", order.getId()); return order; } catch (Exception e) { span.setStatus(StatusCode.ERROR, e.getMessage()); span.recordException(e); throw e; } finally { span.end(); } } } ``` ## Jaeger ### Конфигурация Jaeger ```yaml # docker-compose.yml version: '3.8' services: jaeger: image: jaegertracing/all-in-one:latest ports: - "16686:16686" - "14268:14268" environment: - COLLECTOR_OTLP_ENABLED=true ``` ### Анализ трассировок ```java @Component public class TraceAnalyzer { public void analyzeTrace(String traceId) { // анализ трассировки List spans = getSpansByTraceId(traceId); // поиск узких мест Span slowestSpan = spans.stream() .max(Comparator.comparing(Span::getDuration)) .orElse(null); // анализ ошибок List errorSpans = spans.stream() .filter(span -> span.getStatus().getStatusCode() == StatusCode.ERROR) .collect(Collectors.toList()); } } ```