Skip to content

fix(node): Ensure traces are propagated without spans in Node 23+ #16221

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: develop
Choose a base branch
from

Conversation

mydea
Copy link
Member

@mydea mydea commented May 7, 2025

Today, if the httpIntegration is used without spans (e.g. in a custom OTEL setup or when setting httpIntegration({ spans: false }) manually), outgoing requests will not have traces propagated.

This PR fixes this by using the http.client.request.created diagnostics channel to add the trace headers in this scenario.

However, sadly this channel was only added in Node 23, so it does not work on versions before that.
I suppose this is still worth adding because it is better than what we have today (which is that it does not work at all). We may think about making this work for Node <=22, but this would require us monkey patching http again, which we really do not want to do... Also note that as of now this should not really affect the vast majority of cases, as unless you specifically opt out of spans today this will always work as we always add the otel http instrumentation by default. And in custom otel setups, users will usually have this set up anyhow. (Also, fetch works in all environments as expected).

If we want to, in a follow up, avoid adding the otel spans instrumentation if performance is disabled, we need to think about this... an option could be to always adding the instrumentation on node <=22, and only skip it on Node 23+. But this can be looked at separately, this PR at least makes things better than before on Node 23+...

This supersedes #15735

@mydea mydea requested review from lforst, AbhiPrasad and andreiborza May 7, 2025 15:11
@mydea mydea self-assigned this May 7, 2025
Copy link
Contributor

github-actions bot commented May 7, 2025

size-limit report 📦

Path Size % Change Change
@sentry/browser 23.35 KB - -
@sentry/browser - with treeshaking flags 23.19 KB - -
@sentry/browser (incl. Tracing) 37.25 KB - -
@sentry/browser (incl. Tracing, Replay) 74.47 KB - -
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags 68.34 KB - -
@sentry/browser (incl. Tracing, Replay with Canvas) 79.12 KB - -
@sentry/browser (incl. Tracing, Replay, Feedback) 90.93 KB - -
@sentry/browser (incl. Feedback) 39.75 KB - -
@sentry/browser (incl. sendFeedback) 27.98 KB - -
@sentry/browser (incl. FeedbackAsync) 32.74 KB - -
@sentry/react 25.16 KB - -
@sentry/react (incl. Tracing) 39.24 KB - -
@sentry/vue 27.63 KB - -
@sentry/vue (incl. Tracing) 39.01 KB - -
@sentry/svelte 23.38 KB - -
CDN Bundle 24.55 KB - -
CDN Bundle (incl. Tracing) 37.29 KB - -
CDN Bundle (incl. Tracing, Replay) 72.33 KB - -
CDN Bundle (incl. Tracing, Replay, Feedback) 77.64 KB - -
CDN Bundle - uncompressed 71.62 KB - -
CDN Bundle (incl. Tracing) - uncompressed 110.34 KB - -
CDN Bundle (incl. Tracing, Replay) - uncompressed 221.63 KB - -
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed 234.15 KB - -
@sentry/nextjs (client) 40.84 KB - -
@sentry/sveltekit (client) 37.73 KB - -
@sentry/node 151.5 KB +0.1% +140 B 🔺
@sentry/node - without tracing 95.95 KB +0.19% +179 B 🔺
@sentry/aws-serverless 120.3 KB +0.12% +142 B 🔺

View base workflow run

@mydea mydea force-pushed the fn/propagate-traces-node-http branch from 5e3f8a3 to 5d33b15 Compare May 9, 2025 07:12
Comment on lines +178 to +179
// NOTE: This channel only exist since Node 23
// Before that, outgoing requests are not patched, sadly
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// NOTE: This channel only exist since Node 23
// Before that, outgoing requests are not patched, sadly
// NOTE: This channel only exist since Node 23
// Before that, outgoing requests are not patched
// and trace headers are not propagated, sadly.

Comment on lines +57 to +61
* Whether to propagate Sentry trace headers in outgoing requests.
* By default this is done by the HttpInstrumentation, but if that is not added (e.g. because tracing is disabled)
* then this instrumentation can take over.
*
* @default `false`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

q: Should we mention that this only works for Node >= 23?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants