diff --git a/crates/cli/src/telemetry.rs b/crates/cli/src/telemetry.rs index 79704d2e2..9fc67e43a 100644 --- a/crates/cli/src/telemetry.rs +++ b/crates/cli/src/telemetry.rs @@ -102,7 +102,10 @@ fn stdout_tracer_provider() -> SdkTracerProvider { .build() } -fn otlp_tracer_provider(endpoint: Option<&Url>) -> anyhow::Result { +fn otlp_tracer_provider( + endpoint: Option<&Url>, + sample_rate: f64, +) -> anyhow::Result { let mut exporter = opentelemetry_otlp::SpanExporter::builder() .with_http() .with_http_client(mas_http::reqwest_client()); @@ -119,17 +122,18 @@ fn otlp_tracer_provider(endpoint: Option<&Url>) -> anyhow::Result anyhow::Result<()> { + let sample_rate = config.sample_rate.unwrap_or(1.0); let tracer_provider = match config.exporter { TracingExporterKind::None => return Ok(()), TracingExporterKind::Stdout => stdout_tracer_provider(), - TracingExporterKind::Otlp => otlp_tracer_provider(config.endpoint.as_ref())?, + TracingExporterKind::Otlp => otlp_tracer_provider(config.endpoint.as_ref(), sample_rate)?, }; TRACER_PROVIDER .set(tracer_provider.clone()) diff --git a/crates/config/src/sections/telemetry.rs b/crates/config/src/sections/telemetry.rs index a0127ecf7..29118bd57 100644 --- a/crates/config/src/sections/telemetry.rs +++ b/crates/config/src/sections/telemetry.rs @@ -65,6 +65,13 @@ pub struct TracingConfig { /// List of propagation formats to use for incoming and outgoing requests #[serde(default)] pub propagators: Vec, + + /// Sample rate for traces + /// + /// Defaults to `1.0` if not set. + #[serde(skip_serializing_if = "Option::is_none")] + #[schemars(example = "sample_rate_example", range(min = 0.0, max = 1.0))] + pub sample_rate: Option, } impl TracingConfig { diff --git a/docs/config.schema.json b/docs/config.schema.json index 853b266b0..2a4a2c719 100644 --- a/docs/config.schema.json +++ b/docs/config.schema.json @@ -1213,6 +1213,16 @@ "items": { "$ref": "#/definitions/Propagator" } + }, + "sample_rate": { + "description": "Sample rate for traces\n\nDefaults to `1.0` if not set.", + "examples": [ + 0.5 + ], + "type": "number", + "format": "double", + "maximum": 1.0, + "minimum": 0.0 } } },