From cda19bffd91f70f559c0338e0626cacacd3ec4a8 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Tue, 18 Mar 2025 16:24:31 +0100 Subject: [PATCH 1/2] ref(node): Avoid `provider.register()` which is removed in OTEL v2 See https://github.com/open-telemetry/opentelemetry-js/pull/5503 --- .../node-otel-custom-sampler/src/instrument.ts | 3 +-- .../src/instrument.ts | 18 +++++++++--------- packages/node/src/sdk/initOtel.ts | 11 +++++------ packages/opentelemetry/README.md | 8 ++++---- .../opentelemetry/test/helpers/initOtel.ts | 10 ++++------ packages/vercel-edge/src/sdk.ts | 10 ++++------ 6 files changed, 27 insertions(+), 33 deletions(-) diff --git a/dev-packages/e2e-tests/test-applications/node-otel-custom-sampler/src/instrument.ts b/dev-packages/e2e-tests/test-applications/node-otel-custom-sampler/src/instrument.ts index d0aed916864b..de09f0965baa 100644 --- a/dev-packages/e2e-tests/test-applications/node-otel-custom-sampler/src/instrument.ts +++ b/dev-packages/e2e-tests/test-applications/node-otel-custom-sampler/src/instrument.ts @@ -19,10 +19,9 @@ Sentry.init({ const provider = new NodeTracerProvider({ sampler: new CustomSampler(), + spanProcessors: [new SentrySpanProcessor()], }); -provider.addSpanProcessor(new SentrySpanProcessor()); - provider.register({ propagator: new SentryPropagator(), contextManager: new Sentry.SentryContextManager(), diff --git a/dev-packages/e2e-tests/test-applications/node-otel-without-tracing/src/instrument.ts b/dev-packages/e2e-tests/test-applications/node-otel-without-tracing/src/instrument.ts index ebabd499fee5..b833af11ef83 100644 --- a/dev-packages/e2e-tests/test-applications/node-otel-without-tracing/src/instrument.ts +++ b/dev-packages/e2e-tests/test-applications/node-otel-without-tracing/src/instrument.ts @@ -20,15 +20,15 @@ Sentry.init({ }); // Create and configure NodeTracerProvider -const provider = new NodeTracerProvider({}); - -provider.addSpanProcessor( - new BatchSpanProcessor( - new OTLPTraceExporter({ - url: 'http://localhost:3032/', - }), - ), -); +const provider = new NodeTracerProvider({ + spanProcessors: [ + new BatchSpanProcessor( + new OTLPTraceExporter({ + url: 'http://localhost:3032/', + }), + ), + ], +}); // Initialize the provider provider.register({ diff --git a/packages/node/src/sdk/initOtel.ts b/packages/node/src/sdk/initOtel.ts index 27423a3d033a..5cd50e2711c1 100644 --- a/packages/node/src/sdk/initOtel.ts +++ b/packages/node/src/sdk/initOtel.ts @@ -1,5 +1,5 @@ import moduleModule from 'module'; -import { DiagLogLevel, diag } from '@opentelemetry/api'; +import { DiagLogLevel, context, diag, propagation, trace } from '@opentelemetry/api'; import { Resource } from '@opentelemetry/resources'; import type { SpanProcessor } from '@opentelemetry/sdk-trace-base'; import { BasicTracerProvider } from '@opentelemetry/sdk-trace-base'; @@ -127,11 +127,10 @@ export function setupOtel(client: NodeClient, options: AdditionalOpenTelemetryOp ], }); - // Initialize the provider - provider.register({ - propagator: new SentryPropagator(), - contextManager: new SentryContextManager(), - }); + // Register as globals + trace.setGlobalTracerProvider(provider); + propagation.setGlobalPropagator(new SentryPropagator()); + context.setGlobalContextManager(new SentryContextManager()); return provider; } diff --git a/packages/opentelemetry/README.md b/packages/opentelemetry/README.md index bc4266c85ce0..86a644f5c467 100644 --- a/packages/opentelemetry/README.md +++ b/packages/opentelemetry/README.md @@ -60,6 +60,7 @@ import { setOpenTelemetryContextAsyncContextStrategy, } from '@sentry/opentelemetry'; import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'; +import { context, propagation, trace } from '@opentelemetry/api'; function setupSentry() { Sentry.init({ @@ -77,10 +78,9 @@ function setupSentry() { const SentryContextManager = wrapContextManagerClass(AsyncLocalStorageContextManager); // Initialize the provider - provider.register({ - propagator: new SentryPropagator(), - contextManager: new SentryContextManager(), - }); + trace.setGlobalTracerProvider(provider); + propagation.setGlobalPropagator(new SentryPropagator()); + context.setGlobalContextManager(new SentryContextManager()); setOpenTelemetryContextAsyncContextStrategy(); } diff --git a/packages/opentelemetry/test/helpers/initOtel.ts b/packages/opentelemetry/test/helpers/initOtel.ts index 18e7f1e3d867..121ca0181892 100644 --- a/packages/opentelemetry/test/helpers/initOtel.ts +++ b/packages/opentelemetry/test/helpers/initOtel.ts @@ -1,4 +1,4 @@ -import { DiagLogLevel, diag } from '@opentelemetry/api'; +import { DiagLogLevel, context, diag, propagation, trace } from '@opentelemetry/api'; import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'; import { Resource } from '@opentelemetry/resources'; import { BasicTracerProvider } from '@opentelemetry/sdk-trace-base'; @@ -69,11 +69,9 @@ export function setupOtel(client: TestClientInterface): BasicTracerProvider { // We use a custom context manager to keep context in sync with sentry scope const SentryContextManager = wrapContextManagerClass(AsyncLocalStorageContextManager); - // Initialize the provider - provider.register({ - propagator: new SentryPropagator(), - contextManager: new SentryContextManager(), - }); + trace.setGlobalTracerProvider(provider); + propagation.setGlobalPropagator(new SentryPropagator()); + context.setGlobalContextManager(new SentryContextManager()); return provider; } diff --git a/packages/vercel-edge/src/sdk.ts b/packages/vercel-edge/src/sdk.ts index efb3a8dfcd0c..8c3939d26cba 100644 --- a/packages/vercel-edge/src/sdk.ts +++ b/packages/vercel-edge/src/sdk.ts @@ -1,4 +1,4 @@ -import { DiagLogLevel, diag } from '@opentelemetry/api'; +import { DiagLogLevel, context, diag, propagation, trace } from '@opentelemetry/api'; import { Resource } from '@opentelemetry/resources'; import { BasicTracerProvider } from '@opentelemetry/sdk-trace-base'; import { @@ -171,11 +171,9 @@ export function setupOtel(client: VercelEdgeClient): void { const SentryContextManager = wrapContextManagerClass(AsyncLocalStorageContextManager); - // Initialize the provider - provider.register({ - propagator: new SentryPropagator(), - contextManager: new SentryContextManager(), - }); + trace.setGlobalTracerProvider(provider); + propagation.setGlobalPropagator(new SentryPropagator()); + context.setGlobalContextManager(new SentryContextManager()); client.traceProvider = provider; } From 5a8b50520a72fa377e74d71ea1514a564c1e1140 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Tue, 18 Mar 2025 17:02:57 +0100 Subject: [PATCH 2/2] revert this --- .../node-otel-custom-sampler/src/instrument.ts | 3 ++- .../src/instrument.ts | 18 +++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/dev-packages/e2e-tests/test-applications/node-otel-custom-sampler/src/instrument.ts b/dev-packages/e2e-tests/test-applications/node-otel-custom-sampler/src/instrument.ts index de09f0965baa..d0aed916864b 100644 --- a/dev-packages/e2e-tests/test-applications/node-otel-custom-sampler/src/instrument.ts +++ b/dev-packages/e2e-tests/test-applications/node-otel-custom-sampler/src/instrument.ts @@ -19,9 +19,10 @@ Sentry.init({ const provider = new NodeTracerProvider({ sampler: new CustomSampler(), - spanProcessors: [new SentrySpanProcessor()], }); +provider.addSpanProcessor(new SentrySpanProcessor()); + provider.register({ propagator: new SentryPropagator(), contextManager: new Sentry.SentryContextManager(), diff --git a/dev-packages/e2e-tests/test-applications/node-otel-without-tracing/src/instrument.ts b/dev-packages/e2e-tests/test-applications/node-otel-without-tracing/src/instrument.ts index b833af11ef83..ebabd499fee5 100644 --- a/dev-packages/e2e-tests/test-applications/node-otel-without-tracing/src/instrument.ts +++ b/dev-packages/e2e-tests/test-applications/node-otel-without-tracing/src/instrument.ts @@ -20,15 +20,15 @@ Sentry.init({ }); // Create and configure NodeTracerProvider -const provider = new NodeTracerProvider({ - spanProcessors: [ - new BatchSpanProcessor( - new OTLPTraceExporter({ - url: 'http://localhost:3032/', - }), - ), - ], -}); +const provider = new NodeTracerProvider({}); + +provider.addSpanProcessor( + new BatchSpanProcessor( + new OTLPTraceExporter({ + url: 'http://localhost:3032/', + }), + ), +); // Initialize the provider provider.register({