feat(node)!: Make channel-based instrumentation the default#22501
feat(node)!: Make channel-based instrumentation the default#22501andreiborza wants to merge 41 commits into
Conversation
size-limit report 📦
|
921217b to
e9cde04
Compare
404fb86 to
c9a6733
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 11d7697. Configure here.
bd63462 to
3f9a563
Compare
9808b49 to
9bd4d80
Compare
Make orchestrion diagnostics-channel injection the default in `@sentry/node` and remove the `experimentalUseDiagnosticsChannelInjection()` opt-in. `Sentry.init()` now installs the channel-injection module hooks unconditionally when span recording is enabled, so the opt-in function, its loader indirection, and the name-based OTel->channel integration swap are gone. The self-selecting `dataloader` and `knex` integrations pick the channel path automatically now that `isOrchestrionInjected()` is true by default. Redis stays a composite integration: the native diagnostics-channel subscribers (node-redis >=5.12, ioredis >=5.11, batches) plus the orchestrion subscribers for the older ranges, all sharing the node cache `responseHook`. The vendored OTel patchers only run on runtimes without `tracingChannel` (Node <18.19). BREAKING CHANGE: `experimentalUseDiagnosticsChannelInjection()`, `diagnosticsChannelInjectionIntegrations()`, `isDiagnosticsChannelInjectionEnabled()` and `applyDiagnosticsChannelInjectionIntegrations()` are removed from `@sentry/node`. Channel-based instrumentation is now always on; no opt-in call is needed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…hooks parseFloat of an invalid env value yields NaN, which is not nullish, so hasSpansEnabled would treat tracing as enabled and disagree with @sentry/node. Mirror node's getTracesSampleRate and drop non-finite env values.
develop's hook-registration rework (#22443) resolves the bundled-pnpm specifier via absolute-path webpack externals and dropped the tracingHooksDir option from registerDiagnosticsChannelInjection and the _sentryOrchestrionTracingHooksDir build var. Remove the now-broken nextjs workaround that relied on them; node's init registers the hooks and the externals keep them resolvable.
After rebasing onto develop, the orchestrion runtime chain is bundled into the node builds (no longer lazy-loaded), growing @sentry/node (141->158 KB), @sentry/node without tracing (81->97 KB), and @sentry/aws-serverless (89->106 KB).
CI-measured @sentry/node without tracing (97032B) edged just over the 97 KB limit; CI gzip runs slightly larger than local. Bump without-tracing to 98 KB and @sentry/node to 159 KB for margin.
getAutoPerformanceIntegrations now uses the channel integrations from @sentry/server-utils/orchestrion directly instead of routing through the thin @sentry/node wrappers. Redis and Fastify keep their node wrappers (cache responseHook wiring; Fastify v3/v4 coverage). The wrapper files and their public exports are unchanged; removing them and the vendored OTel is tracked in JS-3074.
9bd4d80 to
4dab6a2
Compare
d7aa19a to
50303d9
Compare
| "sentryTest": { | ||
| "skip": true | ||
| }, |
There was a problem hiding this comment.
/preload is going away so I'm just skipping here.
| "sentryTest": { | ||
| "skip": true | ||
| }, |
There was a problem hiding this comment.
/preload is going away so I'm just skipping here.
… tests" This reverts commit 506f090.
| "sentryTest": { | ||
| "skip": true | ||
| }, |
There was a problem hiding this comment.
Bring your own OTel will change and so the test apps need a bigger overhaul. Skipping for now.
| "sentryTest": { | ||
| "skip": true | ||
| }, |
There was a problem hiding this comment.
Bring your own OTel will change and so the test apps need a bigger overhaul. Skipping for now.
| export function isOrchestrionEnabled(): boolean { | ||
| return process.env.INJECT_ORCHESTRION === 'true' || process.env.INJECT_ORCHESTRION === '1'; | ||
| return true; | ||
| } |
There was a problem hiding this comment.
This will be removed in the follow-up where we remove the iitm instrumentations.
| export function isOrchestrionEnabled(): boolean { | ||
| return process.env.INJECT_ORCHESTRION === 'true' || process.env.INJECT_ORCHESTRION === '1'; | ||
| return true; | ||
| } |
There was a problem hiding this comment.
This will be removed in the follow-up where we remove the iitm instrumentations.
| // The streamlined `Fastify` integration covers fastify `>=3.21.0 <6`; `instrumentFastifyV3` | ||
| // fills the remaining early-v3 gap (`>=3.0.0 <3.21.0`), so it stays preloaded here. |
There was a problem hiding this comment.
This will be removed in the follow-up where we delete iitm instrumentations.

What
Make orchestrion diagnostics-channel instrumentation the default in
@sentry/nodeand remove theexperimentalUseDiagnosticsChannelInjection()opt-in.Why
The channel-based instrumentations shipped opt-in in v10. Making them the default in v11 unlocks instrumentation at run and build time.
Removal of the vendored OTel/IITM code is intentionally out of scope; it is tracked separately as follow-up.
Closes: #22345