Перейти к содержимому
К программе курса
Распределенная трассировка: от основ до production
1 / 186%

Почему 5 секунд в браузере превращаются в 8 часов поиска проблемы?

15 минут

История одного инцидента

14:32 — алерт: P95 /checkout вырос до 5 секунд. Поддержка тонет в тикетах, деньги утекают. Архитектура — 12 микросервисов, пара очередей и сторонние API.

Как чувствуется день без трассировки:

  • 14:45 — фронт выглядит норм: React отдает страницу за 50ms.
  • 15:10 — API Gateway логирует 200ms, подозрения падают на бэкенд.
  • 15:40 — Auth Service чист, подозрение уходит дальше.
  • 16:00 — user-service показывает «4.5s» в одном логе, но почему? В БД все быстро, в кэше тоже.
  • 18:30 — гипотезы сменяют друг друга: сеть? база? страйп? На расследование ушло больше времени, чем на фиксы.

Чувство: вы топчетесь на месте, собирая картинку из разрозненных логов.


Точка перелома: открываем трейсы

Кто-то предлагает: «Давайте глянем Jaeger». Открывается трейс проблемного запроса, и за 30 секунд все пазлы сходятся.

Скриншот Jaeger UI: трейс на 4.8s с аннотациями
За 30 секунд видно: user-service делает 50 одинаковых SQL-запросов вместо одного batch.

Что видно сразу:

  • Общая длительность: 4.8s, самый длинный span — user-service.
  • Внутри user-service — линейка из 50 SQL-запросов по ~5ms каждый.
  • Остальные сервисы занимают сотни миллисекунд и явно не виноваты.

Результат: делаем batch-запрос, выкатываем фикc — и на следующий день график latency зеленеет. Расследование заняло минуты, не часы.


Что такое distributed tracing? (простыми словами)

Distributed tracing — это GPS-трекер для вашего запроса. Он показывает:

  • Где побывал запрос (через какие сервисы и очереди).
  • Сколько времени провел в каждом месте.
  • Что пошло не так и где именно.

Каждый отрезок (span) знает своего родителя, временные метки и контекст (user.id, order.id). Поэтому причина замедления видна сразу.

Как это выглядит в Jaeger UI:

Ключевой insight: Трейс показывает, что user-service делает 50 одинаковых SELECT запросов вместо одного batch-запроса. Это классическая проблема N+1 queries.


Узнаете себя?

Трассировка особенно нужна, если:

  • 🔍 Тратите часы на поиск проблемы в 3+ сервисах.
  • 📧 Фоновые задачи (письма, уведомления) иногда «зависают» без объяснения причин.
  • 💳 Сторонние API (Stripe, Twilio) съедают непонятно сколько времени.
  • 🐌 Уже ловили N+1, full table scan или длинные ретраи и хотите видеть их сразу.

Что дальше

В следующей главе — минимум теории, максимум практики: поднимем простой пример с двумя сервисами и за 15 минут соберем первый трейс в Jaeger. Никаких схем коллекторов и стратегий сэмплирования — только живой результат в UI.

Поехали? Первый трейс за 15 минут — от слов к делу.


Дополнительные материалы

Почему 5 секунд в браузере превращаются в 8 часов поиска проблемы? — Распределенная трассировка: от основ до production — Potapov.me