Distributed Tracing
This document describes how a SDK should propagate information between different services to connect all telemetry (errors, profiles, replays, transaction, check-ins, ...) from those services into one trace.
For an overview see Distributed Tracing in the product docs.
Sentry uses three containers to hold trace information sentry-trace
, traceparent
and baggage
.
With these containers you can propagate a trace to a down-stream service. By either
- adding
sentry-trace
,traceparent
andbaggage
HTTP headers (when doing outgoing HTTP requests), - adding
sentry-trace
,traceparent
andbaggage
as meta data (when putting tasks into a queue, details are specific to the queue you want to support), or - setting environment variables (when calling another process). In this case the env variables should be called
SENTRY_TRACE
,SENTRY_TRACEPARENT
andSENTRY_BAGGAGE
.
The SDK running in the receiving service needs to make sure to pick up incoming trace information by
- reading
sentry-trace
,traceparent
andbaggage
headers for each incoming HTTP request, - reading
sentry-trace
,traceparent
andbaggage
meta data when retrieving an item from a queue, or - reading the environment variables
SENTRY_TRACE
,SENTRY_TRACEPARENT
andSENTRY_BAGGAGE
on start up.
In case both sentry-trace
and traceparent
are present, sentry-trace
takes precedence.
This trace information should be stored in the "propagation context" of the current scope. This makes sure that all telemetry that is emmited from the receiving service to Sentry will include the correct trace information.
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").