Трассировки OpenTelemetry из браузера
Настройте JavaScript SDK OpenTelemetry в React, создайте интервалы для взаимодействий пользователя и экспортируйте их в сборщик на серверной стороне
«Трассировки OpenTelemetry из браузера» — бесплатный урок React Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.
JavaScript SDK OpenTelemetry
JavaScript SDK OpenTelemetry для браузеров состоит из нескольких пакетов: @opentelemetry/sdk-trace-web предоставляет основную реализацию трассировки, @opentelemetry/instrumentation-fetch автоматически создаёт отрезки для всех вызовов fetch API, а @opentelemetry/exporter-trace-otlp-http отправляет отрезки сборщику.
TracerProvider: основа трассировки OTel
TracerProvider — центральный объект конфигурации в OpenTelemetry. Он содержит список SpanProcessors, определяющих, что происходит с завершёнными отрезками, ресурс с описанием приложения (именем и версией сервиса), а также настройки выборки.
BatchSpanProcessor: эффективный экспорт
BatchSpanProcessor собирает завершённые отрезки в памяти и экспортирует их пакетами, а не отправляет каждый отрезок отдельно. Это значительно сокращает количество HTTP-запросов к сборщику, повышает производительность браузера и уменьшает нагрузку на конечную точку сборщика OTel.
OTLPTraceExporter: отправка сборщику
OTLPTraceExporter отправляет пакетные отрезки совместимому с OpenTelemetry сборщику по HTTP в формате JSON или protobuf. Вы задаёте адрес сборщика (например, конечную точку прокси OTel Collector), а экспортёр автоматически выполняет сериализацию и повторные попытки.
Что такое отрезок трассировки
Отрезок представляет собой отдельную единицу работы внутри трассировки: монтирование компонента, вызов сервера или действие пользователя. У отрезков есть имя, время начала, время окончания, состояние (OK или ERROR) и набор атрибутов «ключ — значение». Связанные отрезки объединяются общим ID трассировки и отношениями «родитель — потомок».
Запуск и завершение отрезков вручную
Создайте трассировщик с помощью provider.getTracer('react-app') и запускайте отрезки с помощью tracer.startSpan('component-mount'). После завершения работы вызовите span.end(), чтобы записать время окончания. Всегда завершайте отрезки: оставленные без завершения отрезки расходуют память и создают неполные данные в вашей системе наблюдаемости.
Добавление атрибутов к отрезкам
Атрибуты обогащают отрезки контекстными данными: span.setAttribute('user.id', userId) или span.setAttribute('route', location.pathname). По атрибутам можно выполнять поиск в вашей системе наблюдаемости, что позволяет формировать запросы вроде «показать все медленные отрезки для пользователя 42» или «показать все ошибки на маршруте /checkout».
Автоматическая инструментация запросов fetch
@opentelemetry/instrumentation-fetch изменяет глобальную функцию fetch, чтобы автоматически создавать отрезки для каждого исходящего HTTP-запроса. Отрезок фиксирует адрес, метод, код состояния HTTP и длительность без каких-либо изменений в существующих вызовах fetch.
Распространение контекста через W3C TraceContext
Когда инструментирование fetch создаёт интервал для исходящего запроса, оно внедряет заголовок traceparent W3C TraceContext в запрос. Получающий сервер читает этот заголовок и продолжает ту же трассировку, создавая связанную трассировку, охватывающую браузер и сервер.
Инициализация OpenTelemetry в приложении React
Инициализация OpenTelemetry должна выполняться до монтирования любых компонентов — обычно во входном файле приложения (main.tsx), до вызова ReactDOM.createRoot. Создайте провайдер, зарегистрируйте процессоры и экспортёры и вызовите provider.register(), чтобы сделать его глобальным TracerProvider.
Выборка: управление объёмом трассировок
Запись каждого взаимодействия пользователя в приложениях с высокой нагрузкой создаёт огромный объём данных трассировки. Настройте механизм выборки TraceIdRatioBased в TracerProvider, например отбирайте 10% трассировок, чтобы уменьшить объём данных. Всегда отбирайте 100% трассировок с ошибками с помощью механизма выборки ParentBased, чтобы ни одна ошибка не осталась незамеченной.
Назначение BatchSpanProcessor OpenTelemetry
Почему в браузерных приложениях используется BatchSpanProcessor, а не SimpleSpanProcessor?
Повторение урока
JavaScript SDK OpenTelemetry инструментирует браузеры с помощью TracerProvider, BatchSpanProcessor и OTLPTraceExporter. Интервалы представляют единицы работы, дополненные атрибутами. Инструментирование fetch автоматически создаёт интервалы для вызовов программного интерфейса и внедряет заголовки W3C TraceContext для сквозной распределённой трассировки. Инициализируйте систему заранее, правильно настраивайте выборку и всегда завершайте интервалы, чтобы сохранять чистые данные трассировки.
Часто задаваемые вопросы
Урок «Трассировки OpenTelemetry из браузера» бесплатный?
Да — полный текст урока «Трассировки OpenTelemetry из браузера» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.
Чему я научусь в уроке «Трассировки OpenTelemetry из браузера»?
Настройте JavaScript SDK OpenTelemetry в React, создайте интервалы для взаимодействий пользователя и экспортируйте их в сборщик на серверной стороне Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать React Academy?
Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Трассировки OpenTelemetry из браузера»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке React Academy?
Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Наблюдаемость фронтенда: что это и зачем она нужна
- Трассировки OpenTelemetry из браузера
- Мониторинг реальных пользователей и Web Vitals
- Связывание трассировок фронтенда и бэкенда