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

Обновлено: 13 мая 2026 г. в 12:00

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

средний

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

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

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

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

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

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

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

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

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

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

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

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

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

Контекст

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

Эта глава углубляет тему распределённой трассировки внутри общей платформы наблюдаемости.

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

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

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

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 Collector работает как точка применения правил: , фильтрация, и .
  • Для высоконагруженных систем задавайте отдельные квоты на приём трассировок, чтобы они не съедали бюджет логов и метрик.
  • Хранение проектируется как продуктовое требование: уровни хранения, TTL и целевая .

Путь чтения

  • Начинайте поиск трассировки с сигналов влияния: сервис, status=ERROR и окно высокой задержки p95/p99.
  • Jaeger UI и Grafana Explore должны использовать единые правила именования сервисов и .
  • Контролируйте как отдельный SLI: инженер должен получить трассировку за секунды, а не минуты.
  • обязательна: без неё расследование становится ручным и медленным.

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

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

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

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

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

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

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

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

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

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

Источники

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

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