Трассировка

Трассировка (Tracing) нужна, чтобы отслеживать, как один запрос путешествует через все сервисы системы. Если в монолите у тебя один лог на всё, то в микросервисной архитектуре запрос может заглянуть в десяток разных сервисов. Без трассировки понять, где именно возникла задержка (latency) или отвалилась сеть, просто невозможно.

Как это работает: Trace ID и Span ID
  1. Trace ID: Когда пользователь делает первый запрос (например, на API Gateway), система генерирует уникальный идентификатор всего пути. Он передается от сервиса к сервису в HTTP-заголовках.
  2. Span ID: Внутри одного большого запроса (Trace) есть конкретные шаги. Каждый вызов к БД или другому сервису — это Span (пролет). Каждый Span имеет свой ID и ссылается на родительский Span, чтобы можно было выстроить дерево вызовов.

Здесь один пользовательский запрос (Trace ID: 111) прошёл через три разных сервиса (A, B и C), образуя цепочку вызовов: Span A → Span B → Span C.

Как данные собираются
  • Интеграция в код (OpenTelemetry): Разработчики используют библиотеки-инструментаторы (стандарт сейчас — OpenTelemetry). Они автоматически перехватывают входящие/исходящие HTTP и gRPC запросы, прокидывают Trace ID в заголовках и измеряют время выполнения.
  • Агенты: Иногда используют Sidecar-контейнеры (в Service Mesh, например, Istio), которые прозрачно для приложения перехватывают сетевые вызовы и отправляют трейсы в хранилище.
Где на это смотреть?
  • Jaeger / Zipkin: Открытые (Open-Source) стандарты де-факто. Рисуют красивые диаграммы, где сразу видно, какой микросервис тормозит.
  • Grafana Tempo: Мощный инструмент, который связывает трейсы напрямую с логами и метриками в едином интерфейсе Grafana.
  • SaaS (Datadog, New Relic): Коммерческие монстры, которые делают всё из коробки и сами подсвечивают аномалии с помощью AI.
Полезные ресурсы
  • Uber: Distributed Tracing. В Uber больше 4000 микросервисов. Как проследить забронированную поездку через всю эту паутину, не убив сеть терабайтами трейсов? Читаем про их систему Jaeger.
  • Google Cloud Tracing. Вся современная трассировка выросла из легендарной статьи Google Dapper. Разбираемся, как это устроено в инфраструктуре создателей концепции.