Skip to content

Commit cec6cdd

Browse files
authored
suppress telemetry from otel export (#95)
1 parent 5fea5f5 commit cec6cdd

File tree

6 files changed

+1006
-352
lines changed

6 files changed

+1006
-352
lines changed

Cargo.toml

Lines changed: 55 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,29 @@ tonic = { version = "0.13", optional = true }
1919

2020
rand = "0.9.0"
2121

22-
opentelemetry = { version = "0.30", default-features = false, features = ["trace", "logs"] }
23-
opentelemetry_sdk = { version = "0.30", default-features = false, features = ["trace", "experimental_metrics_custom_reader", "logs"] }
24-
opentelemetry-otlp = { version = "0.30", default-features = false, features = ["trace", "metrics", "logs"] }
22+
opentelemetry = { version = "0.30", default-features = false, features = [
23+
"trace",
24+
"logs",
25+
] }
26+
opentelemetry_sdk = { version = "0.30", default-features = false, features = [
27+
"trace",
28+
"experimental_metrics_custom_reader",
29+
"experimental_trace_batch_span_processor_with_async_runtime",
30+
"experimental_logs_batch_log_processor_with_async_runtime",
31+
"experimental_metrics_periodicreader_with_async_runtime",
32+
"rt-tokio",
33+
"logs",
34+
] }
35+
opentelemetry-otlp = { version = "0.30", default-features = false, features = [
36+
"trace",
37+
"metrics",
38+
"logs",
39+
] }
2540
futures-util = "0.3"
2641

42+
tokio = { version = "1.44.1", default-features = false, features = [
43+
"rt-multi-thread",
44+
] }
2745
tracing = "0.1"
2846
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
2947
tracing-opentelemetry = "0.31"
@@ -40,23 +58,36 @@ regex = "1.11.1"
4058
async-trait = "0.1.88"
4159
futures = { version = "0.3.31", features = ["futures-executor"] }
4260
insta = "1.42.1"
43-
opentelemetry_sdk = { version = "0.30", default-features = false, features = ["testing"] }
61+
opentelemetry_sdk = { version = "0.30", default-features = false, features = [
62+
"testing",
63+
] }
4464
regex = "1.11.1"
45-
tokio = {version = "1.44.1", features = ["test-util", "macros", "rt-multi-thread"] }
65+
tokio = { version = "1.44.1", features = [
66+
"test-util",
67+
"macros",
68+
"rt-multi-thread",
69+
] }
4670
ulid = "1.2.0"
4771
wiremock = "0.6"
4872
tonic-build = "0.13"
4973
tonic = { version = "0.13", features = ["transport"] }
5074
prost = "0.13"
51-
opentelemetry-proto = { version = "0.30", features = ["tonic", "gen-tonic-messages"] }
75+
opentelemetry-proto = { version = "0.30", features = [
76+
"tonic",
77+
"gen-tonic-messages",
78+
] }
5279
tokio-stream = { version = "0.1", features = ["net"] }
5380

5481
# Dependencies for examples
5582
axum = { version = "0.8", features = ["macros"] }
56-
axum-tracing-opentelemetry = { version = "0.29", features = ["tracing_level_info"] }
83+
axum-tracing-opentelemetry = { version = "0.29", features = [
84+
"tracing_level_info",
85+
] }
5786
axum-otel-metrics = "0.12.0"
5887
actix-web = "4.0"
59-
opentelemetry-instrumentation-actix-web = { version = "0.22", features = ["metrics"] }
88+
opentelemetry-instrumentation-actix-web = { version = "0.22", features = [
89+
"metrics",
90+
] }
6091
serde = { version = "1.0", features = ["derive"] }
6192
serde_json = "1.0"
6293
futures-util = "0.3"
@@ -65,9 +96,22 @@ tempfile = "3.20.0"
6596
[features]
6697
default = ["data-dir", "export-http-protobuf"]
6798
data-dir = ["dep:serde", "dep:serde_json"]
68-
export-grpc = ["opentelemetry-otlp/grpc-tonic", "opentelemetry-otlp/tls", "dep:http", "dep:tonic"]
69-
export-http-protobuf = ["opentelemetry-otlp/http-proto", "opentelemetry-otlp/reqwest-blocking-client", "opentelemetry-otlp/reqwest-rustls"]
70-
export-http-json = ["opentelemetry-otlp/http-json", "opentelemetry-otlp/reqwest-blocking-client", "opentelemetry-otlp/reqwest-rustls"]
99+
export-grpc = [
100+
"opentelemetry-otlp/grpc-tonic",
101+
"opentelemetry-otlp/tls",
102+
"dep:http",
103+
"dep:tonic",
104+
]
105+
export-http-protobuf = [
106+
"opentelemetry-otlp/http-proto",
107+
"opentelemetry-otlp/reqwest-client",
108+
"opentelemetry-otlp/reqwest-rustls",
109+
]
110+
export-http-json = [
111+
"opentelemetry-otlp/http-json",
112+
"opentelemetry-otlp/reqwest-client",
113+
"opentelemetry-otlp/reqwest-rustls",
114+
]
71115

72116
[lints.rust]
73117
missing_docs = "warn"
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
use opentelemetry_sdk::logs::LogProcessor;
2+
3+
/// Workaround for <https://github.com/open-telemetry/opentelemetry-rust/issues/3132>
4+
///
5+
/// This wraps the inner exporter and redirects calls to `shutdown_with_timeout` to
6+
/// `shutdown`.
7+
#[derive(Debug)]
8+
pub(crate) struct LogProcessorShutdownHack<T>(T);
9+
10+
impl<T> LogProcessorShutdownHack<T> {
11+
pub(crate) fn new(inner: T) -> Self {
12+
Self(inner)
13+
}
14+
}
15+
16+
impl<T: LogProcessor> LogProcessor for LogProcessorShutdownHack<T> {
17+
fn emit(
18+
&self,
19+
data: &mut opentelemetry_sdk::logs::SdkLogRecord,
20+
instrumentation: &opentelemetry::InstrumentationScope,
21+
) {
22+
self.0.emit(data, instrumentation);
23+
}
24+
25+
fn force_flush(&self) -> opentelemetry_sdk::error::OTelSdkResult {
26+
self.0.force_flush()
27+
}
28+
29+
fn shutdown_with_timeout(
30+
&self,
31+
_timeout: std::time::Duration,
32+
) -> opentelemetry_sdk::error::OTelSdkResult {
33+
// Calling `.shutdown` here is the deliberate purpose of the abstraction
34+
self.0.shutdown()
35+
}
36+
37+
fn shutdown(&self) -> opentelemetry_sdk::error::OTelSdkResult {
38+
self.0.shutdown()
39+
}
40+
41+
fn set_resource(&mut self, resource: &opentelemetry_sdk::Resource) {
42+
self.0.set_resource(resource);
43+
}
44+
}

src/internal/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
pub(crate) mod constants;
22
pub(crate) mod env;
33
pub(crate) mod exporters;
4+
pub(crate) mod log_processor_shutdown_hack;
45
pub(crate) mod logfire_tracer;
56
pub(crate) mod span_data_ext;

0 commit comments

Comments
 (0)