Перейти к содержимому

Script-тег с CDN из Быстрого старта инициализируется сам — почти всё нужное уже вшито в отдаваемый бандл, а остальное берётся из небольшого набора атрибутов data-* на самом теге. Вызывать init() самим нужно, только если требуется опция без атрибута.

Атрибуты data-* тега ​

html
<script
    src="https://app.buglapse.com/cdn/{project-token}/buglapse.min.js"
    data-environment="production"
    data-release="1.4.2"
    data-debug="true"
    data-send-default-pii="true"
    async
></script>
  • data-environment — записывается как contexts.environment в каждое событие. По нему работает фильтр environment: в поиске панели и условия на окружение в выражении фильтра.
  • data-release — записывается как contexts.release. Нужен для релизов и source maps: по нему панель сопоставляет минифицированный кадр стека с картой того же релиза.
  • data-debug — "true", чтобы SDK писал в консоль, что делает ([Buglapse] ...): инициализация клиента, попытки отправки, отброшенные/неудачные пачки. В продакшене не включайте.
  • data-send-default-pii — "true", чтобы интеграции записывали полные адреса и текст элементов; см. sendDefaultPii ниже.
  • data-dsn — DSN проекта. С подключением /cdn/{project-token}/buglapse.min.js не нужен: бандл оттуда уже содержит DSN. Задавайте его, только если раздаёте копию статического бандла сами — без DSN ни из одного источника автоинициализация не запустится.

Вызов init() вручную ​

Это нужно, только если вы не используете подключение /cdn/{project-token}/... (например, своя копия бандла без data-dsn, так что автоинициализации не на что опереться и она не запускается) или нужна опция ниже, которой нет у тега, — свой transport, transportOptions или список integrations заранее:

ts
Buglapse.init({
    dsn: '{dsn}',
    environment: 'production',
    release: '1.4.2',
    debug: true,
})

Не вызывайте его второй раз поверх тега, который уже инициализировался сам, — это целиком заменит клиент и выбросит всё, что стояло в очереди старого.

Все опции ​

  • dsn — DSN проекта, https://{key}@{host}, из Настройки → Общие. Обязателен, если не передан свой transport. Транспорт по умолчанию отправляет на {host}/api/envelope и передаёт ключ в заголовке X-Buglapse-Auth. Отсутствующий или некорректный DSN не бросает исключение: SDK один раз пишет предупреждение [Buglapse] Missing or invalid "dsn" и отбрасывает события.
  • environment / release — см. выше.
  • debug — подробный лог в консоль, как data-debug.
  • transport — фабрика транспорта (в стиле Sentry: (options) => Transport), которая заменяет makeFetchTransport по умолчанию, например makeConsoleTransport для локальной разработки. См. Транспорты.
  • transportOptions — настройка fetch-транспорта по умолчанию: onError, maxBatchSize, flushInterval, immediateTypes, timeout, retries. Свой transport их игнорирует. Тоже на странице Транспорты.
  • integrations — список заранее в стиле Sentry (init({ integrations: [...] })), который сливается со встроенными по имени — элемент с тем же именем, что у встроенного, заменяет его. use() / disable() по-прежнему добавляют или убирают интеграцию потом. См. Интеграции.
  • resolveTraceId — даёт id трейса, к которому присоединяется корневой span/asyncSpan, когда активного трейса нет. Браузерный init() уже связывает его с id, который меняется на каждую загрузку страницы/переход в SPA, так что все корневые операции за один просмотр страницы попадают в один трейс; переопределяйте только для своей группировки. См. Трейсинг, спаны и метрики.
  • tracesSampleRate — вероятность (0–1), что трейс будет отправлен, как одноимённая опция Sentry. По умолчанию 1. Решается один раз на трейс, так что трейс приходит со всеми спанами или не приходит вовсе. С подключением через CDN вместо неё действует Доля трейсов в Настройки → Фильтры. См. Трейсинг → Сэмплирование.
  • tracePropagationTargets — какие исходящие запросы получают заголовки трейса (traceparent, tracestate) от httpTracingIntegration: строки (подстрока адреса) или RegExp. Запросы на тот же домен получают их всегда; это добавляет другие домены, которые должны разрешать оба заголовка в CORS. См. Распределённый трейсинг.
  • propagateSentryTrace — отправлять тем же адресатам ещё и заголовки Sentry sentry-trace и baggage — для сервиса на Sentry SDK, который отправляет в Buglapse. По умолчанию false.
  • sendDefaultPii — можно ли встроенным интеграциям SDK записывать персональные данные, которые они собирают автоматически. По умолчанию false: в адресах, которые SDK записывает сам, сохраняются путь и имена параметров, но каждое значение параметра query/fragment становится [Filtered] (/search?q=[Filtered]&page=[Filtered]) — в хлебных крошках fetch/XHR/навигации, request.url/request.referrer, http.url у спанов и логах HTTP-ошибок и ошибок ресурсов, — а хлебные крошки взаимодействий называют элемент управления (кнопку, ссылку, поле) по подписи, но никогда не читают текст других элементов — см. Как называется элемент. true записывает всё как есть. То, что передаёт ваш код (setUser(), сообщения, атрибуты), не меняется никогда — см. Чувствительные данные.
  • beforeSend(event, hint) — последний взгляд на каждое событие, после всех интеграций и препроцессоров: верните событие (изменённое или нет), чтобы отправить его, или null, чтобы отбросить. hint.originalException — Error, переданный в captureException(). Если функция бросит исключение, событие отбрасывается.
  • beforeBreadcrumb(breadcrumb) — вызывается для каждой хлебной крошки, автоматической или из addBreadcrumb(), до того как она попадёт в след: верните её, чтобы оставить, или null, чтобы отбросить. Если функция бросит исключение, крошка отбрасывается. Крошка, слитая с предыдущей (повторные клики, цикл запросов — см. Поведения), приходит второй раз — как слитая крошка, которая заменит предыдущую; null тогда оставляет предыдущую как была.
  • storage — касается конкурентности в Node (init() из @buglapse/node сам подключает хранилище на AsyncLocalStorage); в браузере настраивать нечего.

Скрипт загрузчика и эта настройка ​

Всё перечисленное выше живёт в вашем собственном коде подключения — из панели это не редактируется. Отдельно вкладка Настройки → Скрипт загрузчика проекта управляет на сервере двумя разными вещами:

  • Переключатели интеграций (перехват консоли, контекст устройства, сессии, дедупликация, входящие фильтры, запись сессий, ...), опции каждой интеграции (источники хлебных крошек, шаблоны входящих фильтров, порог статуса HTTP-ошибок, таймауты трейсинга, маскирование записи, ...) и доли записи сессий вшиваются в сам бандл при каждом запросе (GET /cdn/{token}/buglapse.min.js), так что изменение вступает в силу при следующей загрузке страницы без изменения сниппета. См. Интеграции. Опции-функции (например, beforeStartSpan у трейсинга) там задать нельзя — регистрируйте такую интеграцию из своего кода. Шаблоны входящих фильтров вида /source/flags превращаются в регулярные выражения, остальное — поиск подстроки.
  • Поля Окружение, Релиз и Режим отладки на той же вкладке не сохраняются — они только формируют сниппет для копирования. Действуют те значения, которые в итоге оказались в ваших атрибутах data-* или вызове init().