Class: Datadog::RateSampler

Inherits:
Sampler
  • Object
show all
Defined in:
lib/ddtrace/sampler.rb

Overview

RateSampler is based on a sample rate.

Constant Summary collapse

KNUTH_FACTOR =
1111111111111111111
SAMPLE_RATE_METRIC_KEY =
'_sample_rate'.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sample_rate = 1.0) ⇒ RateSampler

Initialize a RateSampler. This sampler keeps a random subset of the traces. Its main purpose is to reduce the instrumentation footprint.

  • sample_rate: the sample rate as a Float between 0.0 and 1.0. 0.0 means that no trace will be sampled; 1.0 means that all traces will be sampled.



42
43
44
45
46
47
48
49
# File 'lib/ddtrace/sampler.rb', line 42

def initialize(sample_rate = 1.0)
  unless sample_rate > 0.0 && sample_rate <= 1.0
    Datadog::Tracer.log.error('sample rate is not between 0 and 1, disabling the sampler')
    sample_rate = 1.0
  end

  self.sample_rate = sample_rate
end

Instance Attribute Details

#sample_rateObject

Returns the value of attribute sample_rate.



33
34
35
# File 'lib/ddtrace/sampler.rb', line 33

def sample_rate
  @sample_rate
end

Instance Method Details

#sample!(span) ⇒ Object



60
61
62
63
64
# File 'lib/ddtrace/sampler.rb', line 60

def sample!(span)
  (span.sampled = sample?(span)).tap do |sampled|
    span.set_metric(SAMPLE_RATE_METRIC_KEY, @sample_rate) if sampled
  end
end

#sample?(span) ⇒ Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/ddtrace/sampler.rb', line 56

def sample?(span)
  ((span.trace_id * KNUTH_FACTOR) % Datadog::Span::MAX_ID) <= @sampling_id_threshold
end