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

Обзор ​

httpTracingIntegration записывает каждый исходящий HTTP-запрос спаном http.client, названным по методу и пути (POST /v1/charges). Она следит за обоими способами, которыми процесс Node делает запросы:

  • глобальный fetch();
  • node:http / node:https — и все библиотеки поверх них (axios, got, node-fetch, SDK сторонних API).

Каждый спан записывает http.method, http.url и http.status_code. Статус — ok для ответа 2xx и error в остальных случаях, включая сетевые сбои. Собственные запросы SDK на /api/envelope игнорируются.

Запрос, сделанный во время активного спана, становится его дочерним, так что с HttpServerIntegration вызовы, которые делает обработчик запроса, видны внутри трейса этого запроса.

Использование ​

ts
import { use } from '@buglapse/node'
import { httpTracingIntegration } from '@buglapse/node/integrations'

use(httpTracingIntegration())

Передача трейса дальше ​

Каждый исходящий запрос также получает заголовки traceparent и tracestate, указывающие на его спан http.client, — сервис на @buglapse/node с HttpServerIntegration (или на любом SDK, читающем W3C Trace Context) записывает свою работу дочерней этому спану, в том же трейсе. См. Распределённый трейсинг.

По умолчанию их получает любой адрес. tracePropagationTargets сужает это — строка совпадает как подстрока адреса, RegExp — по test():

ts
init({
    dsn: process.env.BUGLAPSE_DSN,
    tracePropagationTargets: ['https://billing.internal', /^https:\/\/api\.example\.com\//],
    integrations: [httpTracingIntegration()],
})

Запрос, у которого уже есть traceparent, не трогается, а записи tracestate других вендоров сохраняются. С propagateSentryTrace: true те же запросы получают ещё и sentry-trace и baggage Sentry.

У самой интеграции опций нет. Спан node:http заканчивается, когда ответ дочитан до конца; ответ, который ваш код не читает, оставляет свой спан неотправленным.