0Pricing
React Academy · Урок

Связывание трассировок фронтенда и бэкенда

Передавайте контекст трассировки через запросы fetch, чтобы интервалы бэкенда отображались в той же трассировке, что и вызвавшее их действие в интерфейсе

«Связывание трассировок фронтенда и бэкенда» — бесплатный урок React Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Цель распределённой трассировки

Конечная цель наблюдаемости клиентской части — единая трассировка, связывающая щелчок пользователя в React с сетью, обработчиками программного интерфейса, вызовами сервисов и запросом к базе данных, вызвавшим медленный ответ. Такая сквозная трассировка делает анализ первопричины мгновенным.

Стандарт W3C TraceContext

Спецификация W3C TraceContext определяет формат заголовка traceparent: version-traceId-parentSpanId-flags. Пример значения выглядит так: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01. Идентификатор трассировки используется во всей распределённой трассировке, а идентификатор родительского интервала меняется на каждом переходе.

Автоматическая инъекция заголовка

Инструментирование fetch в OpenTelemetry автоматически внедряет заголовок traceparent в каждый исходящий запрос fetch. Заголовок содержит текущий идентификатор трассировки и идентификатор интервала клиентского запроса fetch в качестве родительского, позволяя серверной части создать дочерний интервал, связанный с интервалом клиентской части.

Продолжение трассировки на серверной части

На сервере инструментирование HTTP OpenTelemetry для Node.js/Express читает входящий заголовок traceparent и создаёт интервалы, являющиеся дочерними для интервала fetch клиентской части. Идентификатор трассировки сохраняется, поэтому Jaeger или Grafana Tempo показывает всю цепочку — интервал браузера → интервал Express → интервал базы данных — в одном водопадном представлении.

Просмотр трассировок в Jaeger или Grafana Tempo

После инструментирования клиентской и серверной частей откройте Jaeger или Grafana Tempo и найдите идентификатор трассировки. Вы увидите полное водопадное представление: вверху интервал компонента React, под ним интервал fetch, затем интервал обработчика маршрута Express и интервал запроса к базе данных — все с указанием длительности и атрибутов.

Связывание по пользователю

Установите user.id как атрибут для всех интервалов в приложении React с помощью span.setAttribute('user.id', userId). Сделайте то же самое на серверной части. Теперь можно отфильтровать систему наблюдаемости и показать все трассировки для определённого идентификатора пользователя, что позволит диагностировать проблемы, о которых сообщил конкретный клиент.

Связывание по сеансу

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

Связывание сеансов RUM с трассировками

Коммерческие инструменты, такие как Datadog, изначально интегрируют сеансы RUM с трассировками APM. SDK Datadog RUM внедряет специальный заголовок (X-Datadog-Trace-Id) в запросы fetch, а SDK Datadog APM на серверной части читает его и связывает воспроизведение сеанса RUM с распределённой трассировкой — можно одновременно просматривать воспроизведение сеанса и трассировку.

Преимущество корреляции

Представьте, что пользователь жалуется на медленное оформление заказа. С помощью связанных трассировок найдите в системе наблюдаемости данные по user.id, откройте трассировку оформления заказа и сразу увидите, что причиной замедления стал запрос к базе данных длительностью 900 мс, соединявший две большие таблицы, — то, что невозможно заметить по одним метрикам клиентской части.

Коллектор OpenTelemetry как прокси

Браузеры не могут напрямую отправлять трассировки в Jaeger или другие серверы обработки данных из-за ограничений CORS и риска раскрытия учётных данных. Вместо этого запустите коллектор OpenTelemetry как прокси: настройте OTLPTraceExporter для отправки данных в конечную точку коллектора, который затем распределит их между Jaeger, Grafana Tempo или любым другим сервером обработки данных.

Вопросы конфиденциальности

Трассировки клиентской части могут непреднамеренно захватывать конфиденциальные данные: значения полей формы в URL, PII в атрибутах интервалов, токены сеансов в заголовках. Проверьте инструментирование и убедитесь, что конфиденциальные данные не включаются в атрибуты интервалов. Используйте span.setAttribute умеренно и очищайте параметры запроса URL перед их записью.

Формат заголовка traceparent

Каков формат заголовка traceparent стандарта W3C TraceContext?

Повторение урока

Связывание трассировок клиентской и серверной частей создаёт сквозную видимость всего пути пользовательского запроса. Заголовки traceparent стандарта W3C TraceContext автоматически связывают интервалы браузера, созданные fetch, с интервалами серверной части благодаря инструментированию OpenTelemetry. Дополняйте все интервалы атрибутами user.id и session.id для целевой отладки. Используйте коллектор OpenTelemetry как прокси между браузером и серверной частью, чтобы избежать проблем CORS и раскрытия учётных данных.

Часто задаваемые вопросы

Урок «Связывание трассировок фронтенда и бэкенда» бесплатный?

Да — полный текст урока «Связывание трассировок фронтенда и бэкенда» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «Связывание трассировок фронтенда и бэкенда»?

Передавайте контекст трассировки через запросы fetch, чтобы интервалы бэкенда отображались в той же трассировке, что и вызвавшее их действие в интерфейсе Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Связывание трассировок фронтенда и бэкенда»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Наблюдаемость фронтенда: что это и зачем она нужна
  2. Трассировки OpenTelemetry из браузера
  3. Мониторинг реальных пользователей и Web Vitals
  4. Связывание трассировок фронтенда и бэкенда
← Назад к React Academy