Skip to content

Sentry

autotel-sentry bridges Autotel traces to Sentry via a SpanProcessor and optional SentryPropagator.

  • Sentry must be initialized before Autotel init()
  • Set instrumenter: 'otel' in Sentry.init()
Terminal window
npm install autotel autotel-sentry @sentry/node
import * as Sentry from '@sentry/node';
import { init } from 'autotel';
import { createSentrySpanProcessor } from 'autotel-sentry';
Sentry.init({
dsn: process.env.SENTRY_DSN,
tracesSampleRate: 1.0,
instrumenter: 'otel', // Required
});
init({
service: 'my-app',
spanProcessors: [createSentrySpanProcessor(Sentry)],
});

For cross-service trace continuity:

import * as Sentry from '@sentry/node';
import { init } from 'autotel';
import { createSentrySpanProcessor, SentryPropagator } from 'autotel-sentry';
import { CompositePropagator } from '@opentelemetry/core';
import {
W3CTraceContextPropagator,
W3CBaggagePropagator,
} from '@opentelemetry/core';
Sentry.init({
dsn: process.env.SENTRY_DSN,
tracesSampleRate: 1.0,
instrumenter: 'otel',
});
init({
service: 'my-app',
spanProcessors: [createSentrySpanProcessor(Sentry)],
propagator: new CompositePropagator({
propagators: [
new W3CTraceContextPropagator(),
new W3CBaggagePropagator(),
new SentryPropagator(),
],
}),
});
  • example-sentry — Autotel + Sentry bridge with createSentrySpanProcessor() for linked traces and errors.
  • Root OTel spans → Sentry transactions
  • Child OTel spans → Sentry child spans
  • OTel exception events → Sentry errors
  • Spans for Sentry ingestion are filtered out (no infinite loops)