Skip to content

Commit

Permalink
tracing libraries must configure the tracer sampling mechanism so tha…
Browse files Browse the repository at this point in the history
…t, by default, 1 trace per minute gets sent.
  • Loading branch information
jandro996 committed May 21, 2024
1 parent 91397e3 commit 6804c8c
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ final class Builder {
public static Sampler forConfig(final Config config, final TraceConfig traceConfig) {
Sampler sampler;
if (config != null) {
if(!config.isTraceEnabled() && config.areTracingDependantProductsEnabled()){
log.debug("APM is disabled. Only 1 trace per minute will be sent.");
return new ServiceAsmTimeTraceSampler();
}
final Map<String, String> serviceRules = config.getTraceSamplingServiceRules();
final Map<String, String> operationRules = config.getTraceSamplingOperationRules();
List<? extends SamplingRule.TraceSamplingRule> traceSamplingRules;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package datadog.trace.common.sampling;

import datadog.trace.api.sampling.SamplingMechanism;
import datadog.trace.core.CoreSpan;
import datadog.trace.core.util.SimpleRateLimiter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;



public class ServiceAsmTimeTraceSampler implements Sampler, PrioritySampler {

private static final Logger log = LoggerFactory.getLogger(ServiceAsmTimeTraceSampler.class);

private final SimpleRateLimiter rateLimiter;

public ServiceAsmTimeTraceSampler() {
this.rateLimiter = new SimpleRateLimiter(60); //one per minute
}

@Override
public <T extends CoreSpan<T>> boolean sample(final T span) {
// Priority sampling sends all traces to the core agent, including traces marked dropped.
// This allows the core agent to collect stats on all traces.
return true;
}

@Override
public <T extends CoreSpan<T>> void setSamplingPriority(final T span) {

//TODO check how to short circuit this for ASM

if (rateLimiter.tryAcquire()) {
span.setSamplingPriority(
PrioritySampling.SAMPLER_KEEP,
SamplingMechanism.DEFAULT);
} else {
span.setSamplingPriority(
PrioritySampling.SAMPLER_DROP,
SamplingMechanism.DEFAULT);
}

}

}

0 comments on commit 6804c8c

Please sign in to comment.