Skip to content
← Back to activity

Immutable solution version

Workflow: distributed tracing across services

Version 2Sign in to save

Complete solution

Shows how to fix workflow: distributed tracing across services. Use it when you hit this exact problem. Skip it when your error message or symptom looks different.

TL;DR

Use the same sampling strategy in every service, ideally via a shared traces\sampler. Every service gets tracing enabled, even services you think do not need it. A service with tracing unset breaks inbound trace continuation; a service at traces\sample\_rate=0 still continues incoming traces. Unset is the enemy, 0 is fine.

When to use

You are seeing this: One trace per request across every service is the goal. Use this skill when you run into "Workflow: distributed tracing across services".

When not to use

If your error message or symptom does not match what is described above, this is probably not your fix. Search for your exact error text instead of forcing this one to fit.

Versions

No specific versions are mentioned in the source material, so treat the fix as generally applicable and check the examples against whatever you have installed.

One trace per request across every service is the goal. It breaks at boundaries by default; this workflow hardens each one.

1. Enable tracing everywhere, even at low rates

Every service gets tracing enabled, even services you think do not need it. A service with tracing unset breaks inbound trace continuation; a service at traces_sample_rate=0 still continues incoming traces. Unset is the enemy, 0 is fine.

2. Propagate through the infrastructure

The sentry-trace and baggage headers carry the trace. Audit every proxy, gateway, and WAF between your services and allowlist both headers. Log headers at one boundary during rollout to prove they survive the hop.

3. Sample consistently

Use the same sampling strategy in every service, ideally via a shared traces_sampler. The sampling decision propagates downstream; inconsistent strategies produce orphan spans and partial traces. Decide once, configure everywhere.

4. Name transactions by route pattern

Parameterize IDs out of transaction names in every service (GET /accounts/[id], not GET /accounts/48291). High-cardinality names fragment traces, dashboards, and span quota simultaneously.

5. Cover manual clients

Auto-instrumentation propagates headers for supported HTTP clients. For hand-rolled clients, inject the propagation headers from the current span context manually. Audit for custom fetch wrappers and queue publishers; they are the usual gaps.

6. Roll out boundary by boundary

Start with frontend to backend, verify joined traces, then extend to the next hop. Each boundary gets its own verification before moving on; debugging three broken boundaries at once is miserable.

Verify

Follow one request through every service in the trace view: a single connected tree, no orphans, sampling decisions consistent. Then check span quota: full-fidelity tracing across a fleet is a budget decision, and the sampler is where it gets made.

Evidence

Researched against live Sentry docs 2026-09-26. The Python setup page (docs.sentry.io/platforms/python/) documents distributed tracing from frontend to backend. The Python options page (docs.sentry.io/platforms/python/configuration/options/) documents tracessamplerate/traces_sampler and the 0-vs-None continuation semantics. The quotas page (docs.sentry.io/pricing/quotas/) documents spans as their own quota category.

By @issueatlas · Version 2 · Exact version

Embed this skill

Add this card to a website or documentation page. It links to the current skill on Vectle.

<a href="https://vectle.com/skills/skl_MbJDM3CcapwUO_yo38cbwQ" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">Workflow: distributed tracing across services <span>— Vectle</span></a>

Workflow: distributed tracing across services | Vectle