Ответ
TraceId (идентификатор трассировки) — это уникальный идентификатор, который связывает все логи, относящиеся к одному сквозному запросу в распределенной системе (например, в микросервисной архитектуре).
Основная цель: Позволяет отследить полный путь запроса через несколько сервисов, что критически важно для:
- Отладки и мониторинга — поиска всех связанных событий по одному ID.
- Анализа производительности — выявления узких мест в цепочке вызовов.
- Аудита — восстановления последовательности операций.
Как это работает:
- Генерация: TraceId генерируется при поступлении первого (внешнего) запроса в систему.
- Распространение: Передается между всеми сервисами через HTTP-заголовки (например,
X-B3-TraceId). - Логирование: Каждый сервис добавляет этот TraceId в свои логи.
- Формат: Обычно UUID или комбинация timestamp и случайного числа (например,
7fe038b25a9c5e6b).
Пример в Spring Boot с использованием Spring Cloud Sleuth:
import org.slf4j.*;
import org.springframework.web.bind.annotation.*;
@RestController
public class OrderController {
private static final Logger log = LoggerFactory.getLogger(OrderController.class);
@GetMapping("/order/{id}")
public Order getOrder(@PathVariable String id) {
// Sleuth автоматически добавит TraceId и SpanId в сообщение лога
log.info("Fetching order with id: {}", id);
// ... логика сервиса
return order;
}
}
Пример вывода в логах:
2023-10-01 12:00:00 INFO [order-service,7fe038b25a9c5e6b,3f2a1b5c4d6e7f8a] Fetching order...
Здесь 7fe038b25a9c5e6b — это TraceId, а 3f2a1b5c4d6e7f8a — SpanId (идентификатор конкретного этапа внутри трассировки).