Что необходимо, чтобы распределённая трассировка связала запрос, прошедший через несколько сервисов?
- Как настроить трассировку в Spring Boot 3?
Контекст трассировки (trace id, span id) должен передаваться заголовком (W3C traceparent) через каждую границу — HTTP, брокер, асинхронные потоки — и попадать в логи.
- Spring Boot 3: Micrometer Tracing (вместо Spring Cloud Sleuth) + мост OpenTelemetry или Brave
- Клиенты из Spring (RestClient.Builder, WebClient.Builder, KafkaTemplate с observation) передают заголовки сами
- Свой new RestTemplate() без билдера — контекст теряется
А ещё В асинхронных потоках — Context Propagation или TaskDecorator
Подробно
Micrometer Tracing (пришедший на смену Spring Cloud Sleuth) инструментирует стандартные точки автоматически: входящие HTTP-запросы, RestTemplate и WebClient, слушатели брокеров. Проблемы начинаются на нестандартных границах — собственный пул потоков, ручная отправка сообщения, интеграция со сторонним клиентом: там контекст теряется, и трейс распадается на несвязанные куски. Полезная практика — класть идентификатор трейса в MDC, чтобы он попадал в каждую строку лога, и связывать логи с трейсами по нему. Метрики и логи сами по себе корреляции не дают: метрика агрегирована и не знает о конкретном запросе, а логи без общего идентификатора невозможно сшить.
Что хотят услышать
- Передача контекста через все границы.
- Micrometer Tracing в Boot 3.
- Типичные места потери контекста.
Частые ошибки
- Терять контекст при переходе в собственный пул потоков.
- Считать, что централизованные логи заменяют трассировку.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Передавать контекст трассировки (W3C traceparent) через все клиенты и асинхронные границы
- ✗Достаточно включить сбор метрик на каждом сервисе и сопоставить их по времени в Grafana
- ✗Достаточно писать логи в единое хранилище
- ✗Достаточно одинаковой версии Spring Boot во всех сервисах
Что спросят дальше
- Как пробросить контекст трассировки через @Async?
- Зачем идентификатор трейса кладут в MDC?
Разбор темы
- Spring Cloud: config, discovery, gateway, tracing
Config Server, Eureka/DiscoveryClient, Spring Cloud Gateway и распределённая трассировка.
Связанные вопросы
- В цепочке из пяти сервисов у пользователей выросло время ответа. Как вы будете искать причину и что для этого должно быть построено заранее? Middle
- Какие три сигнала составляют основу наблюдаемости? Junior
- Метод помечен @Async, и внутри него SecurityContextHolder.getContext().getAuthentication() возвращает null. Почему? Middle
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.