System Design Space
Граф знанийНастройки

Обновлено: 25 июня 2026 г. в 04:10

Распределённая трассировка в микросервисах (Jaeger, Tempo)

средний

Практический разбор распределённой трассировки в микросервисах: Jaeger, Tempo, OpenTelemetry, путь записи и чтения, выборка, хранение трассировок и расследование задержек.

Распределённая трассировка становится обязательной, когда критический путь запроса уже нельзя восстановить ни по памяти, ни по разрозненным логам.

Глава разбирает Jaeger, Tempo, путь записи, путь чтения и выборку, показывая, как наблюдаемость микросервисов упирается в баланс между глубиной данных, задержкой и стоимостью хранения.

На интервью этот материал помогает чётко объяснить, когда трассировки лучше метрик или логов, как искать участки повышенной задержки и почему полная запись трассировок без выборки не всегда оправдана.

Практическая польза главы

Практика проектирования

Проектируйте путь спана от сервиса до хранилища и обратно к расследованию: инструментирование, коллектор, выборка, хранение и поиск.

Качество решений

Оценивайте стек через скорость поиска трассировки, стоимость хранения, кардинальность меток и полноту критического пути запроса.

Аргументация на интервью

Показывайте, когда трассировка полезнее метрик и логов, как она локализует задержку и почему выборка должна быть осознанной.

Формулировка компромиссов

Явно обсуждайте цену полной записи трассировок, глубину атрибутов, срок хранения и скорость работы интерфейса расследования.

Контекст

Наблюдаемость и проектирование мониторинга

Здесь мы спускаемся на уровень ниже базовой наблюдаемости: как трассировка ведёт запрос через сервисы и где она экономит время на расследовании.

Открыть главу

Когда запрос проходит через десяток сервисов, очередей и зависимостей, вопрос «где именно тормозит» перестаёт решаться по логам одного сервиса. Распределённая трассировка в микросервисах восстанавливает весь путь запроса по связанным спанам, поэтому задержку или ошибку находят по фактам, а не по догадкам. В этой главе мы разбираем , , , , выборку, и хранение трассировок в Jaeger и Tempo. Материал продолжает Наблюдаемость и проектирование мониторинга и фокусируется на операционных решениях, которые ускоряют расследование инцидентов.

Инструменты: Jaeger и Tempo

Jaeger

Когда трассировку только заводят, важнее всего быстро увидеть первый результат. Jaeger — это классическая с открытым исходным кодом и понятным интерфейсом, на которой команда добирается до без долгой настройки.

Сильные стороны

  • Даёт : каскадная диаграмма запроса и критический путь видны уже на первом поэтапном запуске.
  • Хорошо интегрируется с OpenTelemetry.
  • Удобен как интерфейс для дежурных инженеров и .

Компромиссы

  • При росте объёма трассировок чувствительными становятся и размер индексов.
  • Нужны аккуратная и контроль .

Tempo

Серверная часть системы трассировки от Grafana Labs. Делает ставку на дешёвое хранение в , поэтому держит большой поток спанов там, где у других растёт счёт за хранилище.

Сильные стороны

  • Экономичен на масштабе благодаря объектному хранилищу и блочному формату данных.
  • Метрики и трассировки лежат рядом в Grafana Explore, поэтому от всплеска задержки до конкретного спана дежурный доходит без переключения инструментов.
  • Подходит для платформ с большим потоком трассировок и длинными .

Компромиссы

  • Качество диагностики зависит от атрибутов спанов и корректной .
  • Нужен продуманный , иначе становится медленным.

Схема распределённой трассировки

Схема распределённой трассировки в микросервисах

Одна платформа телеметрии обслуживает два разных пути: запись спанов и диагностический поиск.

Как спаны попадают в хранилище

Этапы выстроены сверху вниз: источник, обработка, хранилище и результат расследования.

Инструментированные микросервисы

SDK создают спаны и передают контекст трассировки между HTTP, gRPC и Kafka.

SDKHTTP/gRPCKafkatraceparent
Переход к следующему этапуспаны + traceparent

OpenTelemetry Collector

Коллектор обогащает, фильтрует, выбирает и маршрутизирует телеметрию.

обогащениеполитика выборкимаршрутизация
Переход к следующему этапуэкспорт OTLP

Серверная часть приёма

Поток экспортируется в Jaeger Collector и/или Tempo Distributor.

Jaeger CollectorTempo Distributorразветвление
Переход к следующему этапуиндексы + спаны / блоки

Хранилище трассировок

Jaeger пишет индексы и спаны в хранилище, Tempo складывает блоки в объектное хранилище.

Cassandra/ESS3/GCS/MinIOуровни хранения

Путь записи: как спаны доходят до хранилищ

  1. SDK в сервисах создают спаны и передают traceparent между HTTP, gRPC и Kafka.
  2. OpenTelemetry Collector обогащает телеметрию полями service, env, tenant и применяет политику выборки.
  3. Коллектор экспортирует поток в Jaeger Collector и/или Tempo Distributor.
  4. Jaeger пишет индексы и спаны в хранилище, Tempo формирует блоки в объектном хранилище.

Операционные акценты

  • Jaeger удобен для быстрого старта и знакомого UX расследований.
  • Tempo снижает стоимость за счёт объектного хранилища и отказа от тяжёлого индексирования всех спанов.
  • Для сценариев с высокой кардинальностью критичны выборка по результату запроса и уровни хранения.

Решения для пути записи и пути чтения

Путь записи

  • теряется на любой границе, где его забыли пробросить, — поэтому он должен идти через всё: протокол HTTP, удалённый вызов процедур gRPC, и . Один пропущенный хоп — и трассировка рвётся ровно там, где идёт расследование.
  • Коллектор телеметрии OpenTelemetry работает как точка применения правил: , фильтрация, и .
  • Для высоконагруженных систем задавайте отдельные квоты на приём трассировок, чтобы они не съедали бюджет логов и метрик.
  • Хранение — не настройка по умолчанию, а продуктовое требование: уровни хранения, время жизни данных и целевая решаются заранее, иначе бюджет утечёт незаметно, а старых трассировок не окажется на руках в нужный момент.

Путь чтения

  • Поиск трассировки идёт не с любого запроса, а с сигналов влияния на пользователя: имя сервиса, статус ошибки status=ERROR и окно высокой задержки по перцентилям p95/p99. Так расследование начинается с того, что реально болит, а не со случайной выборки.
  • Jaeger UI и Grafana Explore должны использовать единые правила именования сервисов и .
  • Держите к интерфейсу трассировки под отдельным целевым показателем уровня сервиса (SLI): во время инцидента инженер должен получить трассировку за секунды, иначе медленный поиск сам становится частью простоя.
  • обязательна: без неё расследование становится ручным и медленным.

Практический чек-лист внедрения

Согласовать обязательные : service.name, deployment.environment, tenant, error.type.

Ввести отдельные для критичных API, фоновых задач и шумных точек входа.

Проверить нагрузку коллектора телеметрии и хранилища трассировок на синтетическом и похожем на промышленный трафике.

Встроить в операционные инструкции и шаблоны реагирования на инциденты для дежурной команды.

Частые антипаттерны

Включать стопроцентную выборку без оценки стоимости хранения и запросов и без профилей по критичности трафика — счёт за хранилище растёт быстрее, чем польза от лишних трассировок.

Ограничиваться только и терять внутренние .

Смешивать именование спанов и меток между командами без общего контракта .

Жить с трассировкой как с отдельным инструментом «на всякий случай», а не как с частью процесса : тогда ей пользуются от случая к случаю, и в острый момент она оказывается пустой.

Источники

Связанные главы

  • Наблюдаемость и проектирование мониторинга - Базовый контур наблюдаемости: метрики говорят, что стало хуже, логи — что случилось в одном сервисе, а трассировка связывает это в путь запроса для быстрого первичного разбора инцидента.
  • Inter-Service Communication Patterns - Разбирает протокол HTTP, удалённый вызов процедур gRPC и асинхронные границы — те самые места, где контекст трассировки легче всего потерять, если о нём не подумать заранее.
  • Архитектура сервисной сетки (service mesh) - Показывает телеметрию сервисной сетки и управление трассировкой на уровне контура обработки в микросервисах.
  • Prometheus: история и архитектура - Связывает трассировки с метриками для корреляции задержек, спанов и деградаций.
  • Performance Engineering - Добавляет методы анализа задержек и поиска узких мест, где распределённая трассировка даёт первичную диагностику.
  • Интервью по диагностике инцидентов - Практика первичного разбора и поиска корневой причины, где трассировки сокращают время расследования.

Чтобы отмечать прохождение, включи трекинг в Настройки