From 3f44f4ac179582d29f8ebdf09da19b58f7f0b675 Mon Sep 17 00:00:00 2001 From: Guillaume Deconinck Date: Wed, 19 Nov 2025 11:46:33 +0900 Subject: [PATCH] fix: move telemetry to "warning" level + add timeouts and use non-blocking client --- bins/nittei/src/telemetry.rs | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/bins/nittei/src/telemetry.rs b/bins/nittei/src/telemetry.rs index adbafef6..07544b23 100644 --- a/bins/nittei/src/telemetry.rs +++ b/bins/nittei/src/telemetry.rs @@ -1,3 +1,5 @@ +use std::time::Duration; + use opentelemetry::{global, propagation::TextMapCompositePropagator, trace::TracerProvider}; use opentelemetry_datadog::{ApiVersion, DatadogPipelineBuilder, DatadogPropagator}; use opentelemetry_otlp::{WithExportConfig, WithHttpConfig}; @@ -14,7 +16,10 @@ use tracing_subscriber::{EnvFilter, Registry, layer::SubscriberExt}; /// It should only be called once! pub fn init_subscriber() -> anyhow::Result<()> { // Filter the spans that are shown based on the RUST_LOG env var or the default value ("info") - let env_filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info")); + let env_filter = EnvFilter::try_from_default_env() + .unwrap_or_else(|_| EnvFilter::new("info")) + // Downgrade opentelemetry_sdk errors to warnings + .add_directive("opentelemetry_sdk=warn".parse()?); // If the binary is compiled in debug mode (aka for development) // use the compact format for logs @@ -125,7 +130,8 @@ fn get_tracer_datadog( config.sampler = Box::new(get_sampler()); config.id_generator = Box::new(RandomIdGenerator::default()); - let http_client = reqwest::blocking::Client::new(); + let http_client = get_http_client()?; + DatadogPipelineBuilder::default() .with_http_client(http_client) .with_service_name(service_name) @@ -146,7 +152,7 @@ fn get_tracer_otlp( service_version: String, service_env: String, ) -> anyhow::Result { - let http_client = reqwest::blocking::Client::new(); + let http_client = get_http_client()?; let otlp_exporter = opentelemetry_otlp::SpanExporter::builder() .with_http() .with_http_client(http_client) @@ -192,3 +198,13 @@ fn get_sampler() -> Sampler { // (2) if no parent, then the trace id ratio Sampler::ParentBased(Box::new(Sampler::TraceIdRatioBased(ratio_to_sample))) } + +/// Get the HTTP client to be used +/// This is used to send traces to the tracing endpoint +fn get_http_client() -> anyhow::Result { + reqwest::Client::builder() + .timeout(Duration::from_secs(10)) + .connect_timeout(Duration::from_secs(5)) + .build() + .map_err(|e| anyhow::anyhow!("Failed to create HTTP client for telemetry: {}", e)) +}