Skip to content

Commit 032d344

Browse files
committed
Upgrade opentelemetry
1 parent ba5878e commit 032d344

3 files changed

Lines changed: 76 additions & 62 deletions

File tree

Cargo.lock

Lines changed: 24 additions & 26 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/utils/observability/Cargo.toml

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,22 +52,28 @@ serde_json = { version = "1", default-features = false }
5252
thiserror = { version = "2", default-features = false, features = ["std"] }
5353
tracing = { version = "0.1", default-features = false }
5454
tracing-appender = { version = "0.2", default-features = false }
55-
56-
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
55+
tracing-subscriber = { version = "0.3", features = [
56+
"env-filter",
57+
"json",
58+
"tracing-log",
59+
] }
5760
tower-http = { version = "0.6", default-features = false, features = ["trace"] }
5861

5962
dill = { optional = true, version = "0.14", default-features = false }
60-
opentelemetry = { optional = true, version = "0.26", default-features = false }
61-
opentelemetry_sdk = { optional = true, version = "0.26", default-features = false, features = [
63+
opentelemetry = { optional = true, version = "0.31", default-features = false, features = [
64+
"trace",
65+
"internal-logs",
66+
] }
67+
opentelemetry_sdk = { optional = true, version = "0.31", default-features = false, features = [
6268
"rt-tokio",
6369
] }
64-
opentelemetry-otlp = { optional = true, version = "0.26", default-features = false, features = [
70+
opentelemetry-otlp = { optional = true, version = "0.31", default-features = false, features = [
6571
"trace",
6672
"grpc-tonic",
6773
] }
68-
opentelemetry-semantic-conventions = { optional = true, version = "0.26", default-features = false }
74+
opentelemetry-semantic-conventions = { optional = true, version = "0.31", default-features = false }
6975
tracing-error = { optional = true, version = "0.2", default-features = false }
70-
tracing-opentelemetry = { optional = true, version = "0.27", default-features = false }
76+
tracing-opentelemetry = { optional = true, version = "0.32", default-features = false }
7177

7278
prometheus = { optional = true, version = "0.14", default-features = false }
7379

src/utils/observability/src/init.rs

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,15 @@ pub fn dev(cfg: Config) -> Guard {
5757
let (otel_layer, otlp_guard) = if cfg.otlp_endpoint.is_none() {
5858
(None, None)
5959
} else {
60+
let (tracer, guard) = init_otel_tracer(&cfg);
61+
6062
(
6163
Some(
6264
tracing_opentelemetry::layer()
6365
.with_error_records_to_exceptions(true)
64-
.with_tracer(init_otel_tracer(&cfg)),
66+
.with_tracer(tracer),
6567
),
66-
Some(OtlpGuard),
68+
Some(guard),
6769
)
6870
};
6971

@@ -103,13 +105,15 @@ pub fn service(cfg: Config) -> Guard {
103105
let (otel_layer, otlp_guard) = if cfg.otlp_endpoint.is_none() {
104106
(None, None)
105107
} else {
108+
let (tracer, guard) = init_otel_tracer(&cfg);
109+
106110
(
107111
Some(
108112
tracing_opentelemetry::layer()
109113
.with_error_records_to_exceptions(true)
110-
.with_tracer(init_otel_tracer(&cfg)),
114+
.with_tracer(tracer),
111115
),
112-
Some(OtlpGuard),
116+
Some(guard),
113117
)
114118
};
115119

@@ -132,39 +136,42 @@ pub fn service(cfg: Config) -> Guard {
132136
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
133137

134138
#[cfg(feature = "opentelemetry")]
135-
fn init_otel_tracer(cfg: &Config) -> opentelemetry_sdk::trace::Tracer {
139+
fn init_otel_tracer(cfg: &Config) -> (opentelemetry_sdk::trace::SdkTracer, OtlpGuard) {
136140
use std::time::Duration;
137141

138142
use opentelemetry::KeyValue;
143+
use opentelemetry::trace::TracerProvider;
139144
use opentelemetry_otlp::WithExportConfig as _;
140145
use opentelemetry_semantic_conventions::resource as otel_resource;
141146

142-
let otel_exporter = opentelemetry_otlp::new_exporter()
143-
.tonic()
147+
let otel_exporter = opentelemetry_otlp::SpanExporter::builder()
148+
.with_tonic()
144149
.with_endpoint(cfg.otlp_endpoint.as_ref().unwrap())
145-
.with_timeout(Duration::from_secs(5));
146-
147-
use opentelemetry::trace::TracerProvider;
148-
opentelemetry_otlp::new_pipeline()
149-
.tracing()
150-
.with_exporter(otel_exporter)
151-
.with_trace_config(
152-
opentelemetry_sdk::trace::Config::default()
153-
.with_max_events_per_span(cfg.span_limits.max_events_per_span)
154-
.with_max_attributes_per_span(cfg.span_limits.max_attributes_per_span)
155-
.with_max_links_per_span(cfg.span_limits.max_links_per_span)
156-
.with_max_attributes_per_event(cfg.span_limits.max_attributes_per_event)
157-
.with_max_attributes_per_link(cfg.span_limits.max_attributes_per_link)
158-
.with_resource(opentelemetry_sdk::Resource::new([
150+
.with_timeout(Duration::from_secs(5))
151+
.build()
152+
.unwrap();
153+
154+
let tracer_provider = opentelemetry_sdk::trace::SdkTracerProvider::builder()
155+
.with_batch_exporter(otel_exporter)
156+
.with_max_events_per_span(cfg.span_limits.max_events_per_span)
157+
.with_max_attributes_per_span(cfg.span_limits.max_attributes_per_span)
158+
.with_max_links_per_span(cfg.span_limits.max_links_per_span)
159+
.with_max_attributes_per_event(cfg.span_limits.max_attributes_per_event)
160+
.with_max_attributes_per_link(cfg.span_limits.max_attributes_per_link)
161+
.with_resource(
162+
opentelemetry_sdk::Resource::builder_empty()
163+
.with_attributes([
159164
KeyValue::new(otel_resource::SERVICE_NAME, cfg.service_name.clone()),
160165
KeyValue::new(otel_resource::SERVICE_VERSION, cfg.service_version.clone()),
161-
]))
162-
.with_sampler(opentelemetry_sdk::trace::Sampler::AlwaysOn),
166+
])
167+
.build(),
163168
)
164-
.install_batch(opentelemetry_sdk::runtime::Tokio)
165-
.expect("Creating tracer provider")
166-
.tracer_builder(cfg.service_name.clone())
167-
.build()
169+
.with_sampler(opentelemetry_sdk::trace::Sampler::AlwaysOn)
170+
.build();
171+
172+
let tracer = tracer_provider.tracer(cfg.service_name.clone());
173+
174+
(tracer, OtlpGuard { tracer_provider })
168175
}
169176

170177
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -178,11 +185,14 @@ pub struct Guard {
178185
pub otlp_guard: Option<OtlpGuard>,
179186
}
180187

181-
pub struct OtlpGuard;
188+
#[cfg(feature = "opentelemetry")]
189+
pub struct OtlpGuard {
190+
pub tracer_provider: opentelemetry_sdk::trace::SdkTracerProvider,
191+
}
182192

183193
#[cfg(feature = "opentelemetry")]
184194
impl Drop for OtlpGuard {
185195
fn drop(&mut self) {
186-
opentelemetry::global::shutdown_tracer_provider();
196+
let _ = self.tracer_provider.shutdown();
187197
}
188198
}

0 commit comments

Comments
 (0)