Using OpenTelemetry APIs
Learn how to use OpenTelemetry APIs with Sentry.
Sentry supports OpenTelemetry APIs out of the box. Any spans started using OpenTelemetry APIs will be automatically captured by Sentry, while any spans started using the Sentry SDK will be automatically propagated to OpenTelemetry.
While the Sentry SDK includes some OpenTelemetry instrumentation out of the box, you may want to add additional instrumentation to your application. This can be done by registering the instrumentation through OpenTelemetry like the example below:
const Sentry = require("@sentry/node");
const {
GenericPoolInstrumentation,
} = require("@opentelemetry/instrumentation-generic-pool");
Sentry.init({
dsn: "https://examplePublicKey@o0.ingest.sentry.io/0",
// The SentrySampler will use this to determine which traces to sample
tracesSampleRate: 1.0,
});
// Afterwards, you can add additional instrumentation:
Sentry.addOpenTelemetryInstrumentation(new GenericPoolInstrumentation());
Any instrumentation added like this or via registerInstrumentations()
from @opentelemetry/instrumentation
will be picked up by Sentry.
We recommend using Sentry.startSpan()
and related APIs to create spans, but you can also create spans using native OpenTelemetry APIs.
You can access the tracer Sentry uses via client.tracer
and then create spans with OpenTelemetry APIs, as shown below:
const Sentry = require("@sentry/node");
const tracer = Sentry.getClient()?.tracer;
// Now you can use native APIs on the tracer:
tracer.startActiveSpan("span name", () => {
// measure something
});
You can also use any other tracer. All OpenTelemetry spans will be picked up by Sentry automatically.
You can access the tracer provider set up by Sentry when using Sentry's default OpenTelemetry instrumentation. This makes it easy to, for example, add additional span processors if you want to send span data to another backend or similar.
const Sentry = require("@sentry/node");
const provider = Sentry.getClient()?.traceProvider;
provider?.addSpanProcessor(new MySpanProcessor());
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").