From 7ebc1177df408a99f88dba9e735b71b9e5e5778d Mon Sep 17 00:00:00 2001 From: Samuel Collard Date: Thu, 28 Aug 2025 12:27:50 -0500 Subject: [PATCH 1/2] Fix sending OTLP trace headers downstream to GQL API --- Cargo.lock | 2 ++ crates/apollo-mcp-server/Cargo.toml | 2 +- crates/apollo-mcp-server/src/runtime/trace.rs | 3 +++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 2d5885a7..1e4402e5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2929,9 +2929,11 @@ dependencies = [ "getrandom 0.2.16", "http", "matchit", + "opentelemetry", "reqwest", "reqwest-middleware", "tracing", + "tracing-opentelemetry", ] [[package]] diff --git a/crates/apollo-mcp-server/Cargo.toml b/crates/apollo-mcp-server/Cargo.toml index 3d520c3b..ecea5f1d 100644 --- a/crates/apollo-mcp-server/Cargo.toml +++ b/crates/apollo-mcp-server/Cargo.toml @@ -35,7 +35,7 @@ opentelemetry-stdout = "0.30.0" opentelemetry_sdk = "0.30.0" regex = "1.11.1" reqwest-middleware = "0.4.2" -reqwest-tracing = "0.5.8" +reqwest-tracing = { version = "0.5.8", features = ["opentelemetry_0_30"] } reqwest.workspace = true rmcp = { version = "0.2", features = [ "server", diff --git a/crates/apollo-mcp-server/src/runtime/trace.rs b/crates/apollo-mcp-server/src/runtime/trace.rs index 1bf56420..0e50ab64 100644 --- a/crates/apollo-mcp-server/src/runtime/trace.rs +++ b/crates/apollo-mcp-server/src/runtime/trace.rs @@ -2,6 +2,7 @@ use opentelemetry::{KeyValue, global, trace::TracerProvider as _}; use opentelemetry_sdk::{ Resource, metrics::{MeterProviderBuilder, PeriodicReader, SdkMeterProvider}, + propagation::TraceContextPropagator, trace::{RandomIdGenerator, SdkTracerProvider}, }; @@ -65,6 +66,8 @@ fn init_tracer_provider() -> Result { .with_batch_exporter(exporter) .build(); + // Set the global propagator (usually early in main()) + global::set_text_map_propagator(TraceContextPropagator::new()); global::set_tracer_provider(trace_provider.clone()); Ok(trace_provider) From a6d885f0a1b5d4615c28e018fe230601a9793515 Mon Sep 17 00:00:00 2001 From: Samuel Collard Date: Thu, 28 Aug 2025 13:37:49 -0500 Subject: [PATCH 2/2] Changeset --- .changesets/fix_telemetry_fix_downstream_traces.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changesets/fix_telemetry_fix_downstream_traces.md diff --git a/.changesets/fix_telemetry_fix_downstream_traces.md b/.changesets/fix_telemetry_fix_downstream_traces.md new file mode 100644 index 00000000..d5a8febf --- /dev/null +++ b/.changesets/fix_telemetry_fix_downstream_traces.md @@ -0,0 +1,3 @@ +### fix: Include the cargo feature and TraceContextPropagator to send otel headers downstream - @swcollard PR #307 + +Inside the reqwest middleware, if the global text_map_propagator is not set, it will no op and not send the traceparent and tracestate headers to the Router. Adding this is needed to correlate traces from the mcp server to the router or other downstream APIs \ No newline at end of file