Skip to content

Commit

Permalink
Add requirements for probability sampler (#611)
Browse files Browse the repository at this point in the history
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
  • Loading branch information
bogdandrutu authored Aug 21, 2020
1 parent 36f13ae commit 69f1f68
Showing 1 changed file with 20 additions and 7 deletions.
27 changes: 20 additions & 7 deletions specification/trace/sdk.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ object must be immutable (multiple calls may return different immutable objects)

Returns the sampler name or short description with the configuration. This may
be displayed on debug pages or in the logs. Example:
`"ProbabilitySampler{0.000100}"`.
`"TraceIdRatioBased{0.000100}"`.

Description MUST NOT change over time and caller can cache the returned value.

Expand All @@ -107,16 +107,29 @@ The default sampler is `ParentBased(root=AlwaysOn)`.
* Returns `NOT_RECORD` always.
* Description MUST be `AlwaysOffSampler`.

#### Probability
#### TraceIdRatioBased

* The `ProbabilitySampler` MUST ignore the parent. To respect the parent
`SampledFlag`, the `ProbabilitySampler` should be used as a delegate of the
`ParentBased` sampler specified below.
* Description MUST be `ProbabilitySampler{0.000100}`.
* The `TraceIdRatioBased` MUST ignore the parent `SampledFlag`. To respect the
parent `SampledFlag`, the `TraceIdRatioBased` should be used as a delegate of
the `ParentBased` sampler specified below.
* Description MUST be `TraceIdRatioBased{0.000100}`.

TODO: Add details about how the `ProbabilitySampler` is implemented as a function
TODO: Add details about how the `TraceIdRatioBased` is implemented as a function
of the `TraceID`.

##### Requirements for `TraceIdRatioBased` sampler algorithm

* The sampling algorithm MUST be deterministic. A trace identified by a given
`TraceId` is sampled or not independent of language, time, etc. To achieve this,
implementations MUST use a deterministic hash of the `TraceId` when computing
the sampling decision. By ensuring this, running the sampler on any child `Span`
will produce the same decision.
* A `TraceIdRatioBased` sampler with a given sampling rate MUST also sample all
traces that any `TraceIdRatioBased` sampler with a lower sampling rate would
sample. This is important when a backend system may want to run with a higher
sampling rate than the frontend system, this way all frontend traces will
still be sampled and extra traces will be sampled on the backend only.

#### ParentBased

* This is a composite sampler. `ParentBased` helps distinguished between the
Expand Down

0 comments on commit 69f1f68

Please sign in to comment.