Skip to content

Commit 0a7ad69

Browse files
authored
Add internal logging to HTTP libraries (#2452)
1 parent 938893c commit 0a7ad69

File tree

9 files changed

+20
-7
lines changed

9 files changed

+20
-7
lines changed

.github/workflows/integration_tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,5 @@ jobs:
2424
with:
2525
components: rustfmt
2626
- uses: arduino/setup-protoc@v3
27-
- name: Run integration tests using docker compose
27+
- name: Run integration tests
2828
run: ./scripts/integration_tests.sh

opentelemetry-http/CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
## vNext
44

55
- Bump msrv to 1.75.0.
6-
6+
- Add "internal-logs" feature flag (enabled by default), and emit internal logs.
77

88
## 0.27.0
99

opentelemetry-http/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@ edition = "2021"
1010
rust-version = "1.75.0"
1111

1212
[features]
13+
default = ["internal-logs"]
1314
hyper = ["dep:http-body-util", "dep:hyper", "dep:hyper-util", "dep:tokio"]
1415
reqwest-rustls = ["reqwest", "reqwest/rustls-tls-native-roots"]
1516
reqwest-rustls-webpki-roots = ["reqwest", "reqwest/rustls-tls-webpki-roots"]
17+
internal-logs = ["tracing", "opentelemetry/internal-logs"]
1618

1719
[dependencies]
1820
async-trait = { workspace = true }
@@ -24,3 +26,4 @@ hyper-util = { workspace = true, features = ["client-legacy", "http1", "http2"],
2426
opentelemetry = { version = "0.27", path = "../opentelemetry", features = ["trace"] }
2527
reqwest = { workspace = true, features = ["blocking"], optional = true }
2628
tokio = { workspace = true, features = ["time"], optional = true }
29+
tracing = {workspace = true, optional = true}

opentelemetry-http/src/lib.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,14 @@ pub trait HttpClient: Debug + Send + Sync {
6666

6767
#[cfg(feature = "reqwest")]
6868
mod reqwest {
69+
use opentelemetry::otel_debug;
70+
6971
use super::{async_trait, Bytes, HttpClient, HttpError, Request, Response};
7072

7173
#[async_trait]
7274
impl HttpClient for reqwest::Client {
7375
async fn send(&self, request: Request<Vec<u8>>) -> Result<Response<Bytes>, HttpError> {
76+
otel_debug!(name: "ReqwestClient.Send");
7477
let request = request.try_into()?;
7578
let mut response = self.execute(request).await?.error_for_status()?;
7679
let headers = std::mem::take(response.headers_mut());
@@ -87,6 +90,7 @@ mod reqwest {
8790
#[async_trait]
8891
impl HttpClient for reqwest::blocking::Client {
8992
async fn send(&self, request: Request<Vec<u8>>) -> Result<Response<Bytes>, HttpError> {
93+
otel_debug!(name: "ReqwestBlockingClient.Send");
9094
let request = request.try_into()?;
9195
let mut response = self.execute(request)?.error_for_status()?;
9296
let headers = std::mem::take(response.headers_mut());
@@ -102,16 +106,16 @@ mod reqwest {
102106

103107
#[cfg(feature = "hyper")]
104108
pub mod hyper {
105-
use crate::ResponseExt;
106-
107109
use super::{async_trait, Bytes, HttpClient, HttpError, Request, Response};
110+
use crate::ResponseExt;
108111
use http::HeaderValue;
109112
use http_body_util::{BodyExt, Full};
110113
use hyper::body::{Body as HttpBody, Frame};
111114
use hyper_util::client::legacy::{
112115
connect::{Connect, HttpConnector},
113116
Client,
114117
};
118+
use opentelemetry::otel_debug;
115119
use std::fmt::Debug;
116120
use std::pin::Pin;
117121
use std::task::{self, Poll};
@@ -156,6 +160,7 @@ pub mod hyper {
156160
#[async_trait]
157161
impl HttpClient for HyperClient {
158162
async fn send(&self, request: Request<Vec<u8>>) -> Result<Response<Bytes>, HttpError> {
163+
otel_debug!(name: "HyperClient.Send");
159164
let (parts, body) = request.into_parts();
160165
let mut request = Request::from_parts(parts, Body(Full::from(body)));
161166
if let Some(ref authorization) = self.authorization {

opentelemetry-otlp/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ trace = ["opentelemetry/trace", "opentelemetry_sdk/trace", "opentelemetry-proto/
5858
metrics = ["opentelemetry/metrics", "opentelemetry_sdk/metrics", "opentelemetry-proto/metrics"]
5959
logs = ["opentelemetry/logs", "opentelemetry_sdk/logs", "opentelemetry-proto/logs"]
6060
populate-logs-event-name = ["opentelemetry-proto/populate-logs-event-name"]
61-
internal-logs = ["tracing"]
61+
internal-logs = ["tracing", "opentelemetry/internal-logs"]
6262

6363
# add ons
6464
serialize = ["serde", "serde_json"]

opentelemetry-otlp/examples/basic-otlp-http/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ experimental_metrics_periodicreader_with_async_runtime = ["opentelemetry_sdk/exp
1616
once_cell = { workspace = true }
1717
opentelemetry = { path = "../../../opentelemetry" }
1818
opentelemetry_sdk = { path = "../../../opentelemetry-sdk", features = ["rt-tokio", "experimental_metrics_periodicreader_with_async_runtime"]}
19-
opentelemetry-otlp = { path = "../..", features = ["http-proto", "http-json", "logs"] , default-features = false}
19+
opentelemetry-otlp = { path = "../..", features = ["http-proto", "http-json", "logs", "internal-logs"] , default-features = false}
2020
opentelemetry-appender-tracing = { path = "../../../opentelemetry-appender-tracing", default-features = false}
2121

2222
tokio = { workspace = true, features = ["full"] }

opentelemetry-otlp/src/exporter/http/logs.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use std::sync::Arc;
22

33
use async_trait::async_trait;
44
use http::{header::CONTENT_TYPE, Method};
5+
use opentelemetry::otel_debug;
56
use opentelemetry_sdk::export::logs::{LogBatch, LogExporter};
67
use opentelemetry_sdk::logs::{LogError, LogResult};
78

@@ -32,6 +33,7 @@ impl LogExporter for OtlpHttpClient {
3233
}
3334

3435
let request_uri = request.uri().to_string();
36+
otel_debug!(name: "HttpLogsClient.CallingExport");
3537
let response = client.send(request).await?;
3638

3739
if !response.status().is_success() {

opentelemetry-otlp/src/exporter/http/metrics.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use std::sync::Arc;
22

33
use async_trait::async_trait;
44
use http::{header::CONTENT_TYPE, Method};
5+
use opentelemetry::otel_debug;
56
use opentelemetry_sdk::metrics::data::ResourceMetrics;
67
use opentelemetry_sdk::metrics::{MetricError, MetricResult};
78

@@ -33,6 +34,7 @@ impl MetricsClient for OtlpHttpClient {
3334
request.headers_mut().insert(k.clone(), v.clone());
3435
}
3536

37+
otel_debug!(name: "HttpMetricsClient.CallingExport");
3638
client
3739
.send(request)
3840
.await

opentelemetry-otlp/src/exporter/http/trace.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::sync::Arc;
22

33
use futures_core::future::BoxFuture;
44
use http::{header::CONTENT_TYPE, Method};
5-
use opentelemetry::trace::TraceError;
5+
use opentelemetry::{otel_debug, trace::TraceError};
66
use opentelemetry_sdk::export::trace::{ExportResult, SpanData, SpanExporter};
77

88
use super::OtlpHttpClient;
@@ -47,6 +47,7 @@ impl SpanExporter for OtlpHttpClient {
4747

4848
Box::pin(async move {
4949
let request_uri = request.uri().to_string();
50+
otel_debug!(name: "HttpTracesClient.CallingExport");
5051
let response = client.send(request).await?;
5152

5253
if !response.status().is_success() {

0 commit comments

Comments
 (0)