Получить доступ

Что необходимо, чтобы распределённая трассировка связала запрос, прошедший через несколько сервисов?

MiddleSpring CloudSpring BootSpring Boot >=3
Ещё спрашивают так:
  • Как настроить трассировку в 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

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Micrometer Tracing (пришедший на смену Spring Cloud Sleuth) инструментирует стандартные точки автоматически: входящие HTTP-запросы, RestTemplate и WebClient, слушатели брокеров. Проблемы начинаются на нестандартных границах — собственный пул потоков, ручная отправка сообщения, интеграция со сторонним клиентом: там контекст теряется, и трейс распадается на несвязанные куски. Полезная практика — класть идентификатор трейса в MDC, чтобы он попадал в каждую строку лога, и связывать логи с трейсами по нему. Метрики и логи сами по себе корреляции не дают: метрика агрегирована и не знает о конкретном запросе, а логи без общего идентификатора невозможно сшить.

Что хотят услышать

  • Передача контекста через все границы.
  • Micrometer Tracing в Boot 3.
  • Типичные места потери контекста.

Частые ошибки

  • Терять контекст при переходе в собственный пул потоков.
  • Считать, что централизованные логи заменяют трассировку.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Сквозная передача контекста трассировки в заголовках (стандарт W3C traceparent) и его проброс через все клиенты, слушатели и асинхронные границы
  • ✗Достаточно включить сбор метрик на каждом сервисе
  • ✗Достаточно писать логи в единое хранилище
  • ✗Достаточно одинаковой версии Spring Boot во всех сервисах

Что спросят дальше

  • Как пробросить контекст трассировки через @Async?
  • Зачем идентификатор трейса кладут в MDC?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем