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
npm install @sentry/opentelemetry
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:
- Initialize Sentry, e.g.
@sentry/node
! - Call
setupEventContextTrace(client)
- Add
SentrySampler
as sampler - Add
SentrySpanProcessor
as span processor - Add a context manager wrapped via
wrapContextManagerClass
- Add
SentryPropagator
as propagator - Setup OTEL-powered async context strategy for Sentry via
setOpenTelemetryContextAsyncContextStrategy()
For example, you could set this up as follows:
import * as Sentry from '@sentry/node';
import {
SentryPropagator,
SentrySampler,
SentrySpanProcessor,
setupEventContextTrace,
wrapContextManagerClass,
setOpenTelemetryContextAsyncContextStrategy,
} from '@sentry/opentelemetry';
import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';
function setupSentry() {
Sentry.init({
dsn: 'xxx',
});
const client = Sentry.getClient();
setupEventContextTrace(client);
const provider = new BasicTracerProvider({
sampler: new SentrySampler(client),
});
provider.addSpanProcessor(new SentrySpanProcessor());
const SentryContextManager = wrapContextManagerClass(AsyncLocalStorageContextManager);
provider.register({
propagator: new SentryPropagator(),
contextManager: new SentryContextManager(),
});
setOpenTelemetryContextAsyncContextStrategy();
}
A full setup example can be found in
node-experimental.
Links
8.34.0
Important Changes
- ref(nextjs): Remove dead code (#13828)
Relevant for users of the @sentry/nextjs
package: If you have previously configured a
SENTRY_IGNORE_API_RESOLUTION_ERROR
environment variable, it is now safe to unset it.
Other Changes
- feat(cdn): Export
getReplay
in replay CDN bundles
(#13881) - feat(replay): Clear fallback buffer when switching buffers
(#13914)
- feat(replay): Upgrade rrweb packages to 2.28.0 (#13732)
- fix(docs): Correct supported browsers due to
globalThis
(#13788) - fix(nextjs): Adjust path to
requestAsyncStorageShim.js
template file
(#13928) - fix(nextjs): Detect new locations for request async storage to support Next.js v15.0.0-canary.180 and higher
(#13920)
- fix(nextjs): Drop
_not-found
spans for all HTTP methods
(#13906) - fix(nextjs): Fix resolution of request storage shim fallback
(#13929)
- fix(node): Ensure graphql options are correct when preloading
(#13769)
- fix(node): Local variables handle error (#13827)
- fix(node): Remove
dataloader
instrumentation from default integrations
(#13873) - fix(nuxt): Create declaration files for Nuxt module
(#13909)
- fix(replay): Ensure
replay_id
is removed from frozen DSC when stopped
(#13893) - fix(replay): Try/catch
sendBufferedReplayOrFlush
to prevent cycles
(#13900) - fix(sveltekit): Ensure trace meta tags are always injected
(#13231)
- fix(sveltekit): Update
wrapServerRouteWithSentry
to respect ParamMatchers
(#13390) - fix(wasm): Integration wasm uncaught WebAssembly.Exception
(#13787) (#13854)
- ref(nextjs): Ignore sentry spans based on query param attribute
(#13905)
- ref(utils): Move
vercelWaitUntil
to utils (#13891)
Work in this release was contributed by @trzeciak, @gurpreetatwal, @ykzts and @lizhiyao. Thank you for your
contributions!