Skip to content

Commit 5bcc1ec

Browse files
committed
Allow setting the OTLP tracing sample rate
1 parent bb34e9a commit 5bcc1ec

File tree

3 files changed

+24
-3
lines changed

3 files changed

+24
-3
lines changed

crates/cli/src/telemetry.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,10 @@ fn stdout_tracer_provider() -> SdkTracerProvider {
102102
.build()
103103
}
104104

105-
fn otlp_tracer_provider(endpoint: Option<&Url>) -> anyhow::Result<SdkTracerProvider> {
105+
fn otlp_tracer_provider(
106+
endpoint: Option<&Url>,
107+
sample_rate: f64,
108+
) -> anyhow::Result<SdkTracerProvider> {
106109
let mut exporter = opentelemetry_otlp::SpanExporter::builder()
107110
.with_http()
108111
.with_http_client(mas_http::reqwest_client());
@@ -119,17 +122,18 @@ fn otlp_tracer_provider(endpoint: Option<&Url>) -> anyhow::Result<SdkTracerProvi
119122
let tracer_provider = SdkTracerProvider::builder()
120123
.with_span_processor(batch_processor)
121124
.with_resource(resource())
122-
.with_sampler(Sampler::AlwaysOn)
125+
.with_sampler(Sampler::TraceIdRatioBased(sample_rate))
123126
.build();
124127

125128
Ok(tracer_provider)
126129
}
127130

128131
fn init_tracer(config: &TracingConfig) -> anyhow::Result<()> {
132+
let sample_rate = config.sample_rate.unwrap_or(1.0);
129133
let tracer_provider = match config.exporter {
130134
TracingExporterKind::None => return Ok(()),
131135
TracingExporterKind::Stdout => stdout_tracer_provider(),
132-
TracingExporterKind::Otlp => otlp_tracer_provider(config.endpoint.as_ref())?,
136+
TracingExporterKind::Otlp => otlp_tracer_provider(config.endpoint.as_ref(), sample_rate)?,
133137
};
134138
TRACER_PROVIDER
135139
.set(tracer_provider.clone())

crates/config/src/sections/telemetry.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,13 @@ pub struct TracingConfig {
6565
/// List of propagation formats to use for incoming and outgoing requests
6666
#[serde(default)]
6767
pub propagators: Vec<Propagator>,
68+
69+
/// Sample rate for traces
70+
///
71+
/// Defaults to `1.0` if not set.
72+
#[serde(skip_serializing_if = "Option::is_none")]
73+
#[schemars(example = "sample_rate_example", range(min = 0.0, max = 1.0))]
74+
pub sample_rate: Option<f64>,
6875
}
6976

7077
impl TracingConfig {

docs/config.schema.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1213,6 +1213,16 @@
12131213
"items": {
12141214
"$ref": "#/definitions/Propagator"
12151215
}
1216+
},
1217+
"sample_rate": {
1218+
"description": "Sample rate for traces\n\nDefaults to `1.0` if not set.",
1219+
"examples": [
1220+
0.5
1221+
],
1222+
"type": "number",
1223+
"format": "double",
1224+
"maximum": 1.0,
1225+
"minimum": 0.0
12161226
}
12171227
}
12181228
},

0 commit comments

Comments
 (0)