From 0115dc9c2fb519869ba601a68ecd3e6c4da9ccab Mon Sep 17 00:00:00 2001 From: Cijo Thomas Date: Tue, 27 May 2025 15:39:37 -0700 Subject: [PATCH 1/3] fix: Small improvement to OTLP Exporter logs --- opentelemetry-otlp/src/exporter/http/logs.rs | 6 +++- .../src/exporter/http/metrics.rs | 28 +++++++++++++++---- opentelemetry-otlp/src/exporter/http/trace.rs | 6 ++-- opentelemetry-otlp/src/exporter/tonic/logs.rs | 19 +++++++++---- .../src/exporter/tonic/metrics.rs | 18 ++++++++---- .../src/exporter/tonic/trace.rs | 20 +++++++++---- 6 files changed, 74 insertions(+), 23 deletions(-) diff --git a/opentelemetry-otlp/src/exporter/http/logs.rs b/opentelemetry-otlp/src/exporter/http/logs.rs index 0cba45d99b..5ce94aa7ed 100644 --- a/opentelemetry-otlp/src/exporter/http/logs.rs +++ b/opentelemetry-otlp/src/exporter/http/logs.rs @@ -30,11 +30,12 @@ impl LogExporter for OtlpHttpClient { } let request_uri = request.uri().to_string(); - otel_debug!(name: "HttpLogsClient.CallingExport"); + otel_debug!(name: "HttpLogsClient.ExportStarted"); let response = client .send_bytes(request) .await .map_err(|e| OTelSdkError::InternalFailure(format!("{e:?}")))?; + if !response.status().is_success() { let error = format!( "OpenTelemetry logs export failed. Url: {}, Status Code: {}, Response: {:?}", @@ -42,8 +43,11 @@ impl LogExporter for OtlpHttpClient { response.status().as_u16(), response.body() ); + otel_debug!(name: "HttpLogsClient.ExportFailed", error = &error); return Err(OTelSdkError::InternalFailure(error)); } + + otel_debug!(name: "HttpLogsClient.ExportSucceeded"); Ok(()) } diff --git a/opentelemetry-otlp/src/exporter/http/metrics.rs b/opentelemetry-otlp/src/exporter/http/metrics.rs index b7b7f0363a..7d8317ded7 100644 --- a/opentelemetry-otlp/src/exporter/http/metrics.rs +++ b/opentelemetry-otlp/src/exporter/http/metrics.rs @@ -33,13 +33,31 @@ impl MetricsClient for OtlpHttpClient { request.headers_mut().insert(k.clone(), v.clone()); } - otel_debug!(name: "HttpMetricsClient.CallingExport"); - client + otel_debug!(name: "HttpMetricsClient.ExportStarted"); + let result = client .send_bytes(request) - .await - .map_err(|e| OTelSdkError::InternalFailure(format!("{e:?}")))?; + .await; - Ok(()) + match result { + Ok(response) => { + if response.status().is_success() { + otel_debug!(name: "HttpMetricsClient.ExportSucceeded"); + Ok(()) + } else { + let error = format!( + "OpenTelemetry metrics export failed. Status Code: {}, Response: {:?}", + response.status().as_u16(), + response.body() + ); + otel_debug!(name: "HttpMetricsClient.ExportFailed", error = &error); + Err(OTelSdkError::InternalFailure(error)) + } + } + Err(e) => { + otel_debug!(name: "HttpMetricsClient.ExportFailed", error = format!("{:?}", e)); + Err(OTelSdkError::InternalFailure(format!("{e:?}"))) + } + } } fn shutdown(&self) -> OTelSdkResult { diff --git a/opentelemetry-otlp/src/exporter/http/trace.rs b/opentelemetry-otlp/src/exporter/http/trace.rs index 129a0da7d8..2edae989f6 100644 --- a/opentelemetry-otlp/src/exporter/http/trace.rs +++ b/opentelemetry-otlp/src/exporter/http/trace.rs @@ -42,7 +42,7 @@ impl SpanExporter for OtlpHttpClient { } let request_uri = request.uri().to_string(); - otel_debug!(name: "HttpTracesClient.CallingExport"); + otel_debug!(name: "HttpTracesClient.ExportStarted"); let response = client .send_bytes(request) .await @@ -51,13 +51,15 @@ impl SpanExporter for OtlpHttpClient { if !response.status().is_success() { let error = format!( "OpenTelemetry trace export failed. Url: {}, Status Code: {}, Response: {:?}", - response.status().as_u16(), request_uri, + response.status().as_u16(), response.body() ); + otel_debug!(name: "HttpTracesClient.ExportFailed", error = &error); return Err(OTelSdkError::InternalFailure(error)); } + otel_debug!(name: "HttpTracesClient.ExportSucceeded"); Ok(()) } diff --git a/opentelemetry-otlp/src/exporter/tonic/logs.rs b/opentelemetry-otlp/src/exporter/tonic/logs.rs index 26765ef07a..8b9573dc07 100644 --- a/opentelemetry-otlp/src/exporter/tonic/logs.rs +++ b/opentelemetry-otlp/src/exporter/tonic/logs.rs @@ -72,17 +72,26 @@ impl LogExporter for TonicLogsClient { let resource_logs = group_logs_by_resource_and_scope(batch, &self.resource); - otel_debug!(name: "TonicsLogsClient.CallingExport"); + otel_debug!(name: "TonicLogsClient.ExportStarted"); - client + let result = client .export(Request::from_parts( metadata, extensions, ExportLogsServiceRequest { resource_logs }, )) - .await - .map_err(|e| OTelSdkError::InternalFailure(format!("export error: {:?}", e)))?; - Ok(()) + .await; + + match result { + Ok(_) => { + otel_debug!(name: "TonicLogsClient.ExportSucceeded"); + Ok(()) + } + Err(e) => { + otel_debug!(name: "TonicLogsClient.ExportFailed", error = format!("{:?}", e)); + Err(OTelSdkError::InternalFailure(format!("export error: {:?}", e))) + } + } } fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult { diff --git a/opentelemetry-otlp/src/exporter/tonic/metrics.rs b/opentelemetry-otlp/src/exporter/tonic/metrics.rs index 1d760bac76..aa7b658994 100644 --- a/opentelemetry-otlp/src/exporter/tonic/metrics.rs +++ b/opentelemetry-otlp/src/exporter/tonic/metrics.rs @@ -75,18 +75,26 @@ impl MetricsClient for TonicMetricsClient { )), })?; - otel_debug!(name: "TonicsMetricsClient.CallingExport"); + otel_debug!(name: "TonicMetricsClient.ExportStarted"); - client + let result = client .export(Request::from_parts( metadata, extensions, ExportMetricsServiceRequest::from(metrics), )) - .await - .map_err(|e| OTelSdkError::InternalFailure(format!("{e:?}")))?; + .await; - Ok(()) + match result { + Ok(_) => { + otel_debug!(name: "TonicMetricsClient.ExportSucceeded"); + Ok(()) + } + Err(e) => { + otel_debug!(name: "TonicMetricsClient.ExportFailed", error = format!("{:?}", e)); + Err(OTelSdkError::InternalFailure(format!("{e:?}"))) + } + } } fn shutdown(&self) -> OTelSdkResult { diff --git a/opentelemetry-otlp/src/exporter/tonic/trace.rs b/opentelemetry-otlp/src/exporter/tonic/trace.rs index 4ddad37b50..98b08ddf4d 100644 --- a/opentelemetry-otlp/src/exporter/tonic/trace.rs +++ b/opentelemetry-otlp/src/exporter/tonic/trace.rs @@ -76,17 +76,27 @@ impl SpanExporter for TonicTracesClient { let resource_spans = group_spans_by_resource_and_scope(batch, &self.resource); - otel_debug!(name: "TonicsTracesClient.CallingExport"); - client + otel_debug!(name: "TonicTracesClient.ExportStarted"); + + let result = client .export(Request::from_parts( metadata, extensions, ExportTraceServiceRequest { resource_spans }, )) - .await - .map_err(|e| OTelSdkError::InternalFailure(e.to_string()))?; - Ok(()) + .await; + + match result { + Ok(_) => { + otel_debug!(name: "TonicTracesClient.ExportSucceeded"); + Ok(()) + } + Err(e) => { + otel_debug!(name: "TonicTracesClient.ExportFailed", error = format!("{:?}", e)); + Err(OTelSdkError::InternalFailure(e.to_string())) + } + } } fn shutdown(&mut self) -> OTelSdkResult { From 12b5e1e67b6de9363c5b2ceb8e47268836ee48e0 Mon Sep 17 00:00:00 2001 From: Cijo Thomas Date: Tue, 27 May 2025 15:42:51 -0700 Subject: [PATCH 2/3] fmt --- opentelemetry-otlp/src/exporter/http/metrics.rs | 4 +--- opentelemetry-otlp/src/exporter/tonic/logs.rs | 5 ++++- opentelemetry-otlp/src/exporter/tonic/trace.rs | 1 - 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/opentelemetry-otlp/src/exporter/http/metrics.rs b/opentelemetry-otlp/src/exporter/http/metrics.rs index 7d8317ded7..80633161b3 100644 --- a/opentelemetry-otlp/src/exporter/http/metrics.rs +++ b/opentelemetry-otlp/src/exporter/http/metrics.rs @@ -34,9 +34,7 @@ impl MetricsClient for OtlpHttpClient { } otel_debug!(name: "HttpMetricsClient.ExportStarted"); - let result = client - .send_bytes(request) - .await; + let result = client.send_bytes(request).await; match result { Ok(response) => { diff --git a/opentelemetry-otlp/src/exporter/tonic/logs.rs b/opentelemetry-otlp/src/exporter/tonic/logs.rs index 8b9573dc07..ac58728860 100644 --- a/opentelemetry-otlp/src/exporter/tonic/logs.rs +++ b/opentelemetry-otlp/src/exporter/tonic/logs.rs @@ -89,7 +89,10 @@ impl LogExporter for TonicLogsClient { } Err(e) => { otel_debug!(name: "TonicLogsClient.ExportFailed", error = format!("{:?}", e)); - Err(OTelSdkError::InternalFailure(format!("export error: {:?}", e))) + Err(OTelSdkError::InternalFailure(format!( + "export error: {:?}", + e + ))) } } } diff --git a/opentelemetry-otlp/src/exporter/tonic/trace.rs b/opentelemetry-otlp/src/exporter/tonic/trace.rs index 98b08ddf4d..d77198253e 100644 --- a/opentelemetry-otlp/src/exporter/tonic/trace.rs +++ b/opentelemetry-otlp/src/exporter/tonic/trace.rs @@ -76,7 +76,6 @@ impl SpanExporter for TonicTracesClient { let resource_spans = group_spans_by_resource_and_scope(batch, &self.resource); - otel_debug!(name: "TonicTracesClient.ExportStarted"); let result = client From 809e1ca31e2020c6b2f9cd8149525fd9bae78baf Mon Sep 17 00:00:00 2001 From: Cijo Thomas Date: Tue, 27 May 2025 15:47:16 -0700 Subject: [PATCH 3/3] reuse error formatted string --- opentelemetry-otlp/src/exporter/http/metrics.rs | 5 +++-- opentelemetry-otlp/src/exporter/tonic/logs.rs | 8 +++----- opentelemetry-otlp/src/exporter/tonic/metrics.rs | 5 +++-- opentelemetry-otlp/src/exporter/tonic/trace.rs | 5 +++-- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/opentelemetry-otlp/src/exporter/http/metrics.rs b/opentelemetry-otlp/src/exporter/http/metrics.rs index 80633161b3..f504020528 100644 --- a/opentelemetry-otlp/src/exporter/http/metrics.rs +++ b/opentelemetry-otlp/src/exporter/http/metrics.rs @@ -52,8 +52,9 @@ impl MetricsClient for OtlpHttpClient { } } Err(e) => { - otel_debug!(name: "HttpMetricsClient.ExportFailed", error = format!("{:?}", e)); - Err(OTelSdkError::InternalFailure(format!("{e:?}"))) + let error = format!("{e:?}"); + otel_debug!(name: "HttpMetricsClient.ExportFailed", error = &error); + Err(OTelSdkError::InternalFailure(error)) } } } diff --git a/opentelemetry-otlp/src/exporter/tonic/logs.rs b/opentelemetry-otlp/src/exporter/tonic/logs.rs index ac58728860..5334467247 100644 --- a/opentelemetry-otlp/src/exporter/tonic/logs.rs +++ b/opentelemetry-otlp/src/exporter/tonic/logs.rs @@ -88,11 +88,9 @@ impl LogExporter for TonicLogsClient { Ok(()) } Err(e) => { - otel_debug!(name: "TonicLogsClient.ExportFailed", error = format!("{:?}", e)); - Err(OTelSdkError::InternalFailure(format!( - "export error: {:?}", - e - ))) + let error = format!("export error: {:?}", e); + otel_debug!(name: "TonicLogsClient.ExportFailed", error = &error); + Err(OTelSdkError::InternalFailure(error)) } } } diff --git a/opentelemetry-otlp/src/exporter/tonic/metrics.rs b/opentelemetry-otlp/src/exporter/tonic/metrics.rs index aa7b658994..a95205a522 100644 --- a/opentelemetry-otlp/src/exporter/tonic/metrics.rs +++ b/opentelemetry-otlp/src/exporter/tonic/metrics.rs @@ -91,8 +91,9 @@ impl MetricsClient for TonicMetricsClient { Ok(()) } Err(e) => { - otel_debug!(name: "TonicMetricsClient.ExportFailed", error = format!("{:?}", e)); - Err(OTelSdkError::InternalFailure(format!("{e:?}"))) + let error = format!("{e:?}"); + otel_debug!(name: "TonicMetricsClient.ExportFailed", error = &error); + Err(OTelSdkError::InternalFailure(error)) } } } diff --git a/opentelemetry-otlp/src/exporter/tonic/trace.rs b/opentelemetry-otlp/src/exporter/tonic/trace.rs index d77198253e..b3815b44f2 100644 --- a/opentelemetry-otlp/src/exporter/tonic/trace.rs +++ b/opentelemetry-otlp/src/exporter/tonic/trace.rs @@ -92,8 +92,9 @@ impl SpanExporter for TonicTracesClient { Ok(()) } Err(e) => { - otel_debug!(name: "TonicTracesClient.ExportFailed", error = format!("{:?}", e)); - Err(OTelSdkError::InternalFailure(e.to_string())) + let error = e.to_string(); + otel_debug!(name: "TonicTracesClient.ExportFailed", error = &error); + Err(OTelSdkError::InternalFailure(error)) } } }