Back to Sentry Javascript

Official Sentry SDK for OpenTelemetry

packages/opentelemetry/README.md

10.51.03.1 KB
Original Source
<p align="center"> <a href="https://sentry.io/?utm_source=github&utm_medium=logo" target="_blank"> </a> </p>

Official Sentry SDK for OpenTelemetry

This package allows you to send your OpenTelemetry trace data to Sentry via OpenTelemetry SpanProcessors.

If you are using @sentry/node, OpenTelemetry support is included out of the box. This package is only necessary if you are setting up OpenTelemetry support for Sentry yourself.

Installation

bash
npm install @sentry/opentelemetry

# Or yarn
yarn add @sentry/opentelemetry

Note that @sentry/opentelemetry depends on the following peer dependencies:

  • @opentelemetry/api version 1.0.0 or greater
  • @opentelemetry/core version 1.0.0 or greater
  • @opentelemetry/semantic-conventions version 1.0.0 or greater
  • @opentelemetry/sdk-trace-base version 1.0.0 or greater, or a package that implements that, like @opentelemetry/sdk-node.

Usage

This package exposes a few building blocks you can add to your OpenTelemetry setup in order to capture OpenTelemetry traces to Sentry.

This is how you can use this in your app:

  1. Initialize Sentry, e.g. @sentry/node!
  2. Call setupEventContextTrace(client)
  3. Add SentrySampler as sampler
  4. Add SentrySpanProcessor as span processor
  5. Register the Sentry context manager (SentryAsyncLocalStorageContextManager, or wrapContextManagerClass for a custom base)
  6. Add SentryPropagator as propagator
  7. Setup OTEL-powered async context strategy for Sentry via setOpenTelemetryContextAsyncContextStrategy()

For example, you could set this up as follows:

js
import * as Sentry from '@sentry/node';
import {
  SentryAsyncLocalStorageContextManager,
  SentryPropagator,
  SentrySampler,
  SentrySpanProcessor,
  setupEventContextTrace,
  setOpenTelemetryContextAsyncContextStrategy,
} from '@sentry/opentelemetry';
import { context, propagation, trace } from '@opentelemetry/api';

function setupSentry() {
  Sentry.init({
    dsn: 'xxx',
  });

  const client = Sentry.getClient();
  setupEventContextTrace(client);

  const provider = new BasicTracerProvider({
    sampler: new SentrySampler(client),
  });
  provider.addSpanProcessor(new SentrySpanProcessor());

  // Initialize the provider
  trace.setGlobalTracerProvider(provider);
  propagation.setGlobalPropagator(new SentryPropagator());
  context.setGlobalContextManager(new SentryAsyncLocalStorageContextManager());

  setOpenTelemetryContextAsyncContextStrategy();
}

A full setup example can be found in node-experimental.