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— отправлять тем же адресатам ещё и заголовки Sentrysentry-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().