diff --git a/opentelemetry/src/sdk/trace/config.rs b/opentelemetry/src/sdk/trace/config.rs index 56225d863b..2c190d7f83 100644 --- a/opentelemetry/src/sdk/trace/config.rs +++ b/opentelemetry/src/sdk/trace/config.rs @@ -123,6 +123,66 @@ impl Default for Config { config.span_limits.max_links_per_span = max_links_per_span; } + let sampler_arg = env::var("OTEL_TRACES_SAMPLER_ARG").ok(); + if let Ok(sampler) = env::var("OTEL_TRACES_SAMPLER") { + config.sampler = match sampler.as_str() { + "always_on" => Box::new(Sampler::AlwaysOn), + "always_off" => Box::new(Sampler::AlwaysOff), + "traceidratio" => { + let ratio = sampler_arg.and_then(|r| r.parse::().ok()); + if let Some(r) = ratio { + Box::new(Sampler::TraceIdRatioBased(r)) + } else { + eprintln!( + "WARNING: Missing or invalid OTEL_TRACES_SAMPLER_ARG value. Ignoring." + ); + Box::new(Sampler::TraceIdRatioBased(1.0)) + } + } + "parentbased_always_on" => { + Box::new(Sampler::ParentBased(Box::new(Sampler::AlwaysOn))) + } + "parentbased_always_off" => { + Box::new(Sampler::ParentBased(Box::new(Sampler::AlwaysOff))) + } + "parentbased_traceidratio" => { + let ratio = sampler_arg.and_then(|r| r.parse::().ok()); + if let Some(r) = ratio { + Box::new(Sampler::ParentBased(Box::new(Sampler::TraceIdRatioBased( + r, + )))) + } else { + eprintln!( + "WARNING: Missing or invalid OTEL_TRACES_SAMPLER_ARG value. Ignoring." + ); + Box::new(Sampler::ParentBased(Box::new(Sampler::TraceIdRatioBased( + 1.0, + )))) + } + } + "parentbased_jaeger_remote" => { + eprintln!("WARNING: Unimplemented parentbased_jaeger_remote sampler. Ignoring." + ); + Box::new(Sampler::ParentBased(Box::new(Sampler::AlwaysOn))) + } + "jaeger_remote" => { + eprintln!( "WARNING: Unimplemented jaeger_remote sampler. Ignoring." + ); + Box::new(Sampler::ParentBased(Box::new(Sampler::AlwaysOn))) + } + "xray" => { + eprintln!("WARNING: Unimplemented xray sampler. Ignoring."); + Box::new(Sampler::ParentBased(Box::new(Sampler::AlwaysOn))) + } + s => { + eprintln!( "WARNING: Unrecognised OTEL_TRACES_SAMPLER value: {}. Ignoring.", + s + ); + Box::new(Sampler::ParentBased(Box::new(Sampler::AlwaysOn))) + } + } + } + config } }