Распределённая трассировка помогает понять, где именно тормозит микросервисное приложение: на API, в БД, очереди или внешнем сервисе. Если в логах всё «примерно нормально», а пользователи жалуются на задержки — трассировка показывает полный путь запроса от начала до конца.
Что такое Jaeger и Tempo
- Jaeger — система для сбора, хранения и визуализации трейсов. Подходит для поиска ошибок, анализа latency и service dependency.
- Grafana Tempo — backend для хранения трейсов с тесной интеграцией с Grafana. Сильная сторона — дешёвое масштабируемое хранение и удобная связка с метриками и логами.
- На практике часто используют Tempo + Grafana для хранения и просмотра, а Jaeger UI — как привычный интерфейс анализа.
Как работает распределённая трассировка
Каждый пользовательский запрос разбивается на spans — отдельные операции:
- приём HTTP-запроса
- вызов сервиса
- запрос в PostgreSQL
- обращение к Redis
- вызов внешнего API
Все spans объединяются в один trace по trace_id. Это позволяет видеть всю цепочку вызовов и узкое место. 🧩
Что нужно для запуска
Минимальный стек:
- приложение с OpenTelemetry SDK
- OpenTelemetry Collector
- Jaeger или Tempo
- Grafana для визуализации
Базовый сценарий настройки
-
Инструментируйте приложение через OpenTelemetry.
Для популярных языков есть готовые библиотеки: Java, Go, Python, Node.js, .NET. -
Отправляйте трейсы в OpenTelemetry Collector.
Collector принимает телеметрию, обрабатывает её и экспортирует в Jaeger или Tempo. -
Подключите хранилище:
- Jaeger — если нужен быстрый старт и классический tracing UI
- Tempo — если уже используете Grafana и нужен масштабируемый backend 📈
-
Откройте трейсы в UI и анализируйте:
- длительность каждого span
- ошибки
- повторы запросов
- медленные зависимости
Когда выбрать Jaeger
- нужен понятный старт для команды
- важен готовый UI «из коробки»
- проект небольшой или средний
- хотите быстро внедрить tracing без сложной экосистемы
Когда выбрать Tempo
- уже есть Grafana, Loki, Prometheus
- нужен единый observability-стек
- важна экономия на хранении трейсов
- высокая нагрузка и много сервисов 🚀
Типичные проблемы при внедрении
- нет сквозной передачи trace_id между сервисами
- слишком высокий sampling и перегрузка хранилища
- трассировка есть, но не связана с логами и метриками
- ищут ошибку в UI, но не настроили нормальные теги: service.name, http.route, db.system
Практический вывод
Jaeger удобен как быстрый вход в распределённую трассировку. Tempo лучше вписывается в современный стек observability на базе Grafana. Оптимальный путь для многих команд: OpenTelemetry + Collector + Tempo/Grafana, а Jaeger использовать как ориентир по модели анализа. ✅
Если у вас микросервисы, Kubernetes или нагруженный backend, tracing давно не «опция», а инструмент ежедневной диагностики.
📌 Загляните в подборку каналов про IT — там можно найти ещё больше практики по observability, DevOps, backend и инфраструктуре.