Skip to content

Commit 3ae909b

Browse files
authored
ref(node-experimental): Use sdk-trace-base instead of sdk-trace-node (#9070)
Also update all OTEL dependencies to latest to align these properly. The sdk-trace-node package actually just wraps sdk-trace-base, adds some default exports (that we do not need) + sets the async local storage context manager by default (which we overwrite anyhow). So we can cut down on one dependency there and make this a tiny bit easier. I also made a central `OtelSpan` type in node-experimental to avoid using this everywhere throughout the codebase.
1 parent 42ddf41 commit 3ae909b

File tree

9 files changed

+215
-262
lines changed

9 files changed

+215
-262
lines changed

packages/node-experimental/package.json

+16-16
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,22 @@
2323
"access": "public"
2424
},
2525
"dependencies": {
26-
"@opentelemetry/api": "~1.4.1",
27-
"@opentelemetry/context-async-hooks": "~1.15.0",
28-
"@opentelemetry/instrumentation": "~0.41.0",
29-
"@opentelemetry/instrumentation-express": "~0.33.0",
30-
"@opentelemetry/instrumentation-fastify": "~0.32.0",
31-
"@opentelemetry/instrumentation-graphql": "~0.35.0",
32-
"@opentelemetry/instrumentation-http": "~0.41.0",
33-
"@opentelemetry/instrumentation-mongodb": "~0.36.0",
34-
"@opentelemetry/instrumentation-mongoose": "~0.33.0",
35-
"@opentelemetry/instrumentation-mysql": "~0.34.0",
36-
"@opentelemetry/instrumentation-mysql2": "~0.34.0",
37-
"@opentelemetry/instrumentation-nestjs-core": "~0.33.0",
38-
"@opentelemetry/instrumentation-pg": "~0.36.0",
39-
"@opentelemetry/sdk-trace-node": "~1.15.0",
40-
"@opentelemetry/semantic-conventions": "~1.15.0",
41-
"@prisma/instrumentation": "~5.0.0",
26+
"@opentelemetry/api": "~1.6.0",
27+
"@opentelemetry/context-async-hooks": "~1.17.0",
28+
"@opentelemetry/instrumentation": "~0.43.0",
29+
"@opentelemetry/instrumentation-express": "~0.33.1",
30+
"@opentelemetry/instrumentation-fastify": "~0.32.2",
31+
"@opentelemetry/instrumentation-graphql": "~0.35.1",
32+
"@opentelemetry/instrumentation-http": "~0.43.0",
33+
"@opentelemetry/instrumentation-mongodb": "~0.37.0",
34+
"@opentelemetry/instrumentation-mongoose": "~0.33.1",
35+
"@opentelemetry/instrumentation-mysql": "~0.34.1",
36+
"@opentelemetry/instrumentation-mysql2": "~0.34.1",
37+
"@opentelemetry/instrumentation-nestjs-core": "~0.33.1",
38+
"@opentelemetry/instrumentation-pg": "~0.36.1",
39+
"@opentelemetry/sdk-trace-base": "~1.17.0",
40+
"@opentelemetry/semantic-conventions": "~1.17.0",
41+
"@prisma/instrumentation": "~5.3.1",
4242
"@sentry/core": "7.70.0",
4343
"@sentry/node": "7.70.0",
4444
"@sentry/opentelemetry-node": "7.70.0",

packages/node-experimental/src/integrations/http.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,14 @@ import type { Attributes } from '@opentelemetry/api';
22
import { SpanKind } from '@opentelemetry/api';
33
import { registerInstrumentations } from '@opentelemetry/instrumentation';
44
import { HttpInstrumentation } from '@opentelemetry/instrumentation-http';
5-
import type { Span as OtelSpan } from '@opentelemetry/sdk-trace-node';
65
import { SemanticAttributes } from '@opentelemetry/semantic-conventions';
76
import { hasTracingEnabled, Transaction } from '@sentry/core';
87
import { getCurrentHub } from '@sentry/node';
98
import { _INTERNAL_getSentrySpan } from '@sentry/opentelemetry-node';
109
import type { EventProcessor, Hub, Integration } from '@sentry/types';
1110
import type { ClientRequest, IncomingMessage, ServerResponse } from 'http';
1211

13-
import type { NodeExperimentalClient } from '../types';
12+
import type { NodeExperimentalClient, OtelSpan } from '../types';
1413
import { getRequestSpanData } from '../utils/getRequestSpanData';
1514

1615
interface TracingOptions {

packages/node-experimental/src/sdk/initOtel.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { diag, DiagLogLevel } from '@opentelemetry/api';
2-
import { AlwaysOnSampler, NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
2+
import { AlwaysOnSampler, BasicTracerProvider } from '@opentelemetry/sdk-trace-base';
33
import { getCurrentHub } from '@sentry/core';
44
import { SentryPropagator, SentrySpanProcessor } from '@sentry/opentelemetry-node';
55
import { logger } from '@sentry/utils';
@@ -26,14 +26,13 @@ export function initOtel(): () => void {
2626
}
2727

2828
// Create and configure NodeTracerProvider
29-
const provider = new NodeTracerProvider({
29+
const provider = new BasicTracerProvider({
3030
sampler: new AlwaysOnSampler(),
3131
});
3232
provider.addSpanProcessor(new SentrySpanProcessor());
3333

3434
// We use a custom context manager to keep context in sync with sentry scope
3535
const contextManager = new SentryContextManager();
36-
contextManager.enable();
3736

3837
// Initialize the provider
3938
provider.register({

packages/node-experimental/src/types.ts

+3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { Tracer } from '@opentelemetry/api';
2+
import type { Span as OtelSpan } from '@opentelemetry/sdk-trace-base';
23
import type { NodeClient, NodeOptions } from '@sentry/node';
34
import type { Breadcrumb, Transaction } from '@sentry/types';
45

@@ -24,3 +25,5 @@ export interface TransactionWithBreadcrumbs extends Transaction {
2425
/** Add a breadcrumb to this transaction. */
2526
addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): void;
2627
}
28+
29+
export type { OtelSpan };

packages/node-experimental/src/utils/addOriginToSpan.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// We are using the broader OtelSpan type from api here, as this is also what integrations etc. use
12
import type { Span as OtelSpan } from '@opentelemetry/api';
23
import { _INTERNAL_getSentrySpan } from '@sentry/opentelemetry-node';
34
import type { SpanOrigin } from '@sentry/types';

packages/node-experimental/src/utils/getRequestSpanData.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
import type { Span as OtelSpan } from '@opentelemetry/sdk-trace-base';
21
import { SemanticAttributes } from '@opentelemetry/semantic-conventions';
32
import type { SanitizedRequestData } from '@sentry/types';
43
import { getSanitizedUrlString, parseUrl } from '@sentry/utils';
54

5+
import type { OtelSpan } from '../types';
6+
67
/**
78
* Get sanitizied request data from an OTEL span.
89
*/

packages/opentelemetry-node/package.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@
3434
"@opentelemetry/semantic-conventions": "1.x"
3535
},
3636
"devDependencies": {
37-
"@opentelemetry/api": "^1.4.1",
37+
"@opentelemetry/api": "^1.6.0",
3838
"@opentelemetry/core": "^1.7.0",
39-
"@opentelemetry/sdk-trace-base": "^1.15.0",
40-
"@opentelemetry/sdk-trace-node": "^1.15.0",
41-
"@opentelemetry/semantic-conventions": "^1.7.0",
39+
"@opentelemetry/sdk-trace-base": "^1.17.0",
40+
"@opentelemetry/sdk-trace-node": "^1.17.0",
41+
"@opentelemetry/semantic-conventions": "^1.17.0",
4242
"@sentry/node": "7.70.0"
4343
},
4444
"scripts": {

packages/opentelemetry-node/test/spanprocessor.test.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ describe('SentrySpanProcessor', () => {
275275
'service.name': 'test-service',
276276
'telemetry.sdk.language': 'nodejs',
277277
'telemetry.sdk.name': 'opentelemetry',
278-
'telemetry.sdk.version': '1.15.0',
278+
'telemetry.sdk.version': '1.17.0',
279279
},
280280
},
281281
});
@@ -300,7 +300,7 @@ describe('SentrySpanProcessor', () => {
300300
'service.name': 'test-service',
301301
'telemetry.sdk.language': 'nodejs',
302302
'telemetry.sdk.name': 'opentelemetry',
303-
'telemetry.sdk.version': '1.15.0',
303+
'telemetry.sdk.version': '1.17.0',
304304
},
305305
},
306306
});

0 commit comments

Comments
 (0)