Dev48
ЯЗЫК
  • О нас
  • Услуги
  • Индустрии
  • Технологии
  • Статьи
  • Контакты
Забронировать звонок
    Главная/Статьи/Svyazyvanie klientskih treysov s logami
Dev48
info@dev48.org+375 29 320-40-96WhatsApp@isky_by

© 2026 · Все права защищены.

Связывание клиентских трейсов с логами

Источник: Supabase•28 сентября 2026 г. в 19:07

Связывание клиентских трейсов с логами

Библиотека supabase-js теперь передает W3C Trace Context в Supabase, благодаря чему трейс клиента и соответствующий лог Supabase используют общий trace_id.

Библиотека supabase-js теперь передает W3C Trace Context в Supabase. Включите эту функцию, и trace_id из клиентских запросов будет передаваться через API Gateway и логи Edge Function в Supabase, что позволит отслеживать единый запрос из браузера вплоть до логов бэкенда.

Представьте, что фронтенд-трейс показывает медленный запрос, уходящий из браузера, а лог Supabase показывает соответствующий запрос на сервере. До сих пор ничто их не связывало: SDK выполнял вызов, Supabase фиксировал его в логах, и эти две записи существовали в разных системах без общего идентификатора. Отладка через эту границу требовала ручного сопоставления временных меток.

Теперь, когда включен параметр tracePropagation, SDK добавляет три стандартных заголовка к запросам, направленным на домены Supabase:

  • traceparent
  • tracestate
  • baggage

Supabase считывает входящий контекст трассировки и проставляет тот же trace_id в генерируемых им логах. Любой трейсер, совместимый со спецификацией W3C (OpenTelemetry, Sentry, Datadog, Honeycomb, Grafana), подхватывает трассировку на стороне сервера.

В этом руководстве рассматривается supabase-js. Передача трассировок также доступна в Swift, Flutter и Python; ознакомьтесь с документацией для настройки под конкретный язык и актуальным списком.

SDK не настраивает OpenTelemetry за вас. Вы используете собственный трейсер, а затем сообщаете клиенту о необходимости передачи контекста.

Сначала настройте OpenTelemetry обычным образом: установите SDK (@opentelemetry/sdk-trace-node для Node, @opentelemetry/sdk-trace-web для браузера), добавьте экспортер и глобально зарегистрируйте TracerProvider. Среда выполнения трассировки должна иметь доступ к @opentelemetry/api в вашем приложении; установите его напрямую, если ваш менеджер пакетов не подтягивает его вместе с SDK.

Затем загрузите среду выполнения трассировки один раз в точке входа вашего приложения и включите передачу на клиенте:

_10

import '@supabase/supabase-js/tracing'

_10

import { createClient } from '@supabase/supabase-js'

_10

_10

const supabase = createClient(SUPABASE_URL, SUPABASE_KEY, {

_10

tracePropagation: true,

_10

Основной бандл не содержит кода OpenTelemetry, именно этот первый импорт связывает их воедино.

Оберните вызовы Supabase в активный спан, чтобы появился трейс для передачи:

_10

await tracer.startActiveSpan('load-dashboard', async (span) => {

_10

const { data } = await supabase.from('profiles').select('*')

_10

span.end()

_10

Если ваш семплер отбрасывает большинство трейсов, но вы все равно хотите передавать запросы Supabase, переопределите решение семплирования:

_10

import '@supabase/supabase-js/tracing'

_10

_10

const supabase = createClient(SUPABASE_URL, SUPABASE_KEY, {

_10

tracePropagation: { enabled: true, respectSamplingDecision: false },

_10

Функция Log Drains перенаправляет ваши логи Supabase во внешний бэкенд. При включенной передаче трассировок каждый перенаправленный лог содержит тот же trace_id, что и трейсы вашего клиента и сервера, поэтому вы можете объединить их в уже используемом интерфейсе трассировки.

В этом случае спан браузера в Sentry и соответствующий лог API Gateway, перенаправленный в Datadog, выстраиваются под одним trace_id. Для локальных инсталляций, использующих коллектор OpenTelemetry, это то же объединение в контролируемой вами инфраструктуре.

Интеграция с OpenTelemetry находится за собственной точкой входа, поэтому основной бандл supabase-js содержит ноль кода OpenTelemetry. В ваш бандл ничего не добавляется и ничего не разрешается на этапе сборки, пока вы сами не подключите эту функцию. Это позволяет не затрагивать React Native/Hermes, Metro и сборщики для Edge-среды, а также означает, что при подключении функции ваш сборщик сможет увидеть зависимость и включить ее.

  • Поддержка CDN/UMD отсутствует. Среда выполнения трассировки не может быть загружена с тегом script, поэтому передача трассировок недоступна в сборке для CDN.
  • Доступно в supabase-js, Swift, Flutter и Python.
  • Только для доменов Supabase. Заголовки прикрепляются к хосту вашего проекта (*.supabase.co, *.supabase.in) и локальным хостам разработки (localhost, 127.0.0.1, [::1]), но никогда к сторонним хостам, даже при использовании кастомного метода fetch.
  • Логи API Gateway и Edge Function. На данный момент это источники логов, которые подхватывают trace_id.
  • Требуется реальный спан. Если на момент запроса нет активного спана или зарегистрированного TracerProvider (по умолчанию API использует фиктивный провайдер), передавать нечего, и SDK молча выполняет операцию-заглушку (no-op).
  • Решения семплирования учитываются по умолчанию. Неотсемплированные трейсы не отправляют заголовки, если вы не установите параметр respectSamplingDecision: false.

Передача трассировок уже доступна в supabase-js. Добавьте import '@supabase/supabase-js/tracing' в точке входа, включите tracePropagation, укажите на него ваш существующий трейсер, и ваши клиентские трейсы совпадут с логами Supabase.

Уже используете tracePropagation из более ранней версии? Обновитесь до supabase-js версии 2.112.0 или выше и добавьте строку import '@supabase/supabase-js/tracing'. Версии с 2.106.0 по 2.111.x молча не отправляли заголовки трассировки в бандл-приложениях, поэтому именно обновление исправляет передачу, а не только добавление импорта.

Полная инструкция по установке, включая параметры семплирования, находится в руководстве по клиентской трассировке.

← Все статьи

О чём эта статья

Ещё в разделе «Разработка ПО»

Все →
Применение открытых политик к AWS API Gateway
MuleSoft

Применение открытых политик к AWS API Gateway

Бизнес-кредиты на пополнение капитала: 6 видов и принципы работы (2026)
Shopify

Бизнес-кредиты на пополнение капитала: 6 видов и принципы работы (2026)

Виды натуральных тканей для одежды (2026)
Shopify

Виды натуральных тканей для одежды (2026)

Реклама в ChatGPT: что нужно знать маркетологам
Sprinklr

Реклама в ChatGPT: что нужно знать маркетологам

За пределами связи: изучаем квантовый рубеж вместе с EPB Quantum Lab
Amdocs

За пределами связи: изучаем квантовый рубеж вместе с EPB Quantum Lab

Доступно в режиме предварительного просмотра для разработчиков (Developer Preview): самоуправляемый помощник командной строки Red Hat Enterprise Linux
Red Hat

Доступно в режиме предварительного просмотра для разработчиков (Developer Preview): самоуправляемый помощник командной строки Red Hat Enterprise Linux

Ещё от Supabase

Настройте Supabase для каждого окружения Expo одной командой
Supabase

Настройте Supabase для каждого окружения Expo одной командой

Корпоративная авторизация для MCP: теперь Claude может выдавать подтверждение личности
Supabase

Корпоративная авторизация для MCP: теперь Claude может выдавать подтверждение личности

Представляем DBArena: открытые и воспроизводимые тесты производительности для хостингового Postgres
Supabase

Представляем DBArena: открытые и воспроизводимые тесты производительности для хостингового Postgres

Explorer и Notebooks: расследования, которые ваша команда может повторить
Supabase

Explorer и Notebooks: расследования, которые ваша команда может повторить

Закрытая альфа-версия Multigres: автоматическое переключение при сбоях для Supabase Postgres
Supabase

Закрытая альфа-версия Multigres: автоматическое переключение при сбоях для Supabase Postgres

Публичная бета-версия OrioleDB: новый движок хранения Postgres для таблиц с частыми обновлениями
Supabase

Публичная бета-версия OrioleDB: новый движок хранения Postgres для таблиц с частыми обновлениями