-
Notifications
You must be signed in to change notification settings - Fork 375
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
Trace Tags Propagation in Distributed Traces #2260
Conversation
b2155fb
to
091a0bc
Compare
Codecov Report
@@ Coverage Diff @@
## master #2260 +/- ##
========================================
Coverage 98.33% 98.33%
========================================
Files 1100 1102 +2
Lines 58334 58613 +279
========================================
+ Hits 57361 57638 +277
- Misses 973 975 +2
📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pretty big, but good to see this ready to go! Thanks for your hard work, and patience with reviews on this one.
If you think it would be helpful, I would encourage sanity-testing a pre-release build in some kind of controlled environment. But that shouldn't block a merge at this point.
This implements the propagation of Datadog-specific trace tags across a distributed trace's lifecycle.
Trace tags starting with the string
_dd.p.
are considered Datadog distributed tags, are are propagated through the newx-datadog-tags
header.The
x-datadog-tags
header is consumed from upstream calls, if present, and inject into downstream calls when present.The first value for a distributed tag is
_dd.p.dm
: Sampling Decision Maker. This tag represents what mechanism was used to make a sampling decision.When the sampling decision comes from an upstream context,
ddtrace
propagates that value downstream, as well as setting it as a trace-level tag. This tag will be flushed with trace payload.When the sampling decision is made in the instrumented Ruby application, the value of
_dd.p.dm
is populated locally and propagated downstream.