Skip to content

Commit 83adbff

Browse files
committed
Upgrade to tracing-opentelemetry 0.24
1 parent 70f6948 commit 83adbff

8 files changed

+70
-64
lines changed

Cargo.toml

+8-9
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "tracing-opentelemetry"
3-
version = "0.24.0"
3+
version = "0.25.0"
44
description = "OpenTelemetry integration for tracing"
55
homepage = "https://github.com/tokio-rs/tracing-opentelemetry"
66
repository = "https://github.com/tokio-rs/tracing-opentelemetry"
@@ -23,8 +23,8 @@ metrics = ["opentelemetry/metrics","opentelemetry_sdk/metrics", "smallvec"]
2323
metrics_gauge_unstable = ["opentelemetry/otel_unstable"]
2424

2525
[dependencies]
26-
opentelemetry = { version = "0.23.0", default-features = false, features = ["trace"] }
27-
opentelemetry_sdk = { version = "0.23.0", default-features = false, features = ["trace"] }
26+
opentelemetry = { version = "0.24", default-features = false, features = ["trace"] }
27+
opentelemetry_sdk = { version = "0.24.1", default-features = false, features = ["trace"] }
2828
tracing = { version = "0.1.35", default-features = false, features = ["std"] }
2929
tracing-core = "0.1.28"
3030
tracing-subscriber = { version = "0.3.0", default-features = false, features = ["registry", "std"] }
@@ -41,12 +41,11 @@ smallvec = { version = "1.0", optional = true }
4141
[dev-dependencies]
4242
async-trait = "0.1.56"
4343
criterion = { version = "0.5.1", default-features = false, features = ["html_reports"] }
44-
opentelemetry = { version = "0.23.0", features = ["trace", "metrics"] }
45-
opentelemetry_sdk = { version = "0.23.0", default-features = false, features = ["trace", "rt-tokio"] }
46-
opentelemetry-jaeger = "0.22.0"
47-
opentelemetry-stdout = { version = "0.4.0", features = ["trace", "metrics"] }
48-
opentelemetry-otlp = { version = "0.16.0", features = ["metrics"] }
49-
opentelemetry-semantic-conventions = "0.15.0"
44+
opentelemetry = { version = "0.24", features = ["trace", "metrics"] }
45+
opentelemetry_sdk = { version = "0.24", default-features = false, features = ["trace", "rt-tokio"] }
46+
opentelemetry-stdout = { version = "0.5", features = ["trace", "metrics"] }
47+
opentelemetry-otlp = { version = "0.17", features = ["metrics"] }
48+
opentelemetry-semantic-conventions = "0.16"
5049
futures-util = { version = "0.3.17", default-features = false }
5150
tokio = { version = "1", features = ["full"] }
5251
tokio-stream = "0.1"

benches/trace.rs

+5-10
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use opentelemetry::{
33
trace::{Span, SpanBuilder, Tracer as _, TracerProvider as _},
44
Context,
55
};
6-
use opentelemetry_sdk::trace::{Config, SpanLimits, Tracer, TracerProvider};
6+
use opentelemetry_sdk::trace::{Config, Tracer, TracerProvider};
77
#[cfg(not(target_os = "windows"))]
88
use pprof::criterion::{Output, PProfProfiler};
99
use std::time::SystemTime;
@@ -160,15 +160,10 @@ fn many_events(c: &mut Criterion) {
160160
}
161161

162162
{
163-
let provider = TracerProvider::builder()
164-
.with_config(Config {
165-
span_limits: SpanLimits {
166-
max_events_per_span: 1000,
167-
..SpanLimits::default()
168-
},
169-
..Config::default()
170-
})
171-
.build();
163+
let mut config = Config::default();
164+
config.span_limits.max_events_per_span = 1000;
165+
166+
let provider = TracerProvider::builder().with_config(config).build();
172167
let tracer = provider.tracer("bench");
173168
let otel_layer = tracing_opentelemetry::layer()
174169
.with_tracer(tracer)

examples/opentelemetry-error.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ impl Display for SpanData {
141141
.as_secs()
142142
)?;
143143
writeln!(f, "- Resource:")?;
144-
for (k, v) in self.0.resource.iter() {
145-
writeln!(f, " - {}: {}", k, v)?;
144+
for kv in self.0.attributes.iter() {
145+
writeln!(f, " - {}: {}", kv.key, kv.value)?;
146146
}
147147
writeln!(f, "- Attributes:")?;
148148
for kv in self.0.attributes.iter() {

examples/opentelemetry-otlp.rs

+8-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use opentelemetry::{global, Key, KeyValue};
1+
use opentelemetry::{global, trace::TracerProvider, Key, KeyValue};
22
use opentelemetry_sdk::{
33
metrics::{
44
reader::{DefaultAggregationSelector, DefaultTemporalitySelector},
@@ -93,7 +93,7 @@ fn init_meter_provider() -> SdkMeterProvider {
9393

9494
// Construct Tracer for OpenTelemetryLayer
9595
fn init_tracer() -> Tracer {
96-
opentelemetry_otlp::new_pipeline()
96+
let provider = opentelemetry_otlp::new_pipeline()
9797
.tracing()
9898
.with_trace_config(
9999
opentelemetry_sdk::trace::Config::default()
@@ -108,20 +108,24 @@ fn init_tracer() -> Tracer {
108108
.with_batch_config(BatchConfig::default())
109109
.with_exporter(opentelemetry_otlp::new_exporter().tonic())
110110
.install_batch(runtime::Tokio)
111-
.unwrap()
111+
.unwrap();
112+
113+
global::set_tracer_provider(provider.clone());
114+
provider.tracer("tracing-otel-subscriber")
112115
}
113116

114117
// Initialize tracing-subscriber and return OtelGuard for opentelemetry-related termination processing
115118
fn init_tracing_subscriber() -> OtelGuard {
116119
let meter_provider = init_meter_provider();
120+
let tracer = init_tracer();
117121

118122
tracing_subscriber::registry()
119123
.with(tracing_subscriber::filter::LevelFilter::from_level(
120124
Level::INFO,
121125
))
122126
.with(tracing_subscriber::fmt::layer())
123127
.with(MetricsLayer::new(meter_provider.clone()))
124-
.with(OpenTelemetryLayer::new(init_tracer()))
128+
.with(OpenTelemetryLayer::new(tracer))
125129
.init();
126130

127131
OtelGuard { meter_provider }

src/layer.rs

+18-8
Original file line numberDiff line numberDiff line change
@@ -516,13 +516,18 @@ where
516516
/// ```no_run
517517
/// use tracing_opentelemetry::OpenTelemetryLayer;
518518
/// use tracing_subscriber::layer::SubscriberExt;
519+
/// use opentelemetry::trace::TracerProvider;
519520
/// use tracing_subscriber::Registry;
520521
///
521-
/// // Create a jaeger exporter pipeline for a `trace_demo` service.
522-
/// let tracer = opentelemetry_jaeger::new_agent_pipeline()
523-
/// .with_service_name("trace_demo")
522+
/// // Create an OTLP pipeline exporter for a `trace_demo` service.
523+
///
524+
/// let otlp_exporter = opentelemetry_otlp::new_exporter().tonic();
525+
/// let tracer = opentelemetry_otlp::new_pipeline()
526+
/// .tracing()
527+
/// .with_exporter(otlp_exporter)
524528
/// .install_simple()
525-
/// .expect("Error initializing Jaeger exporter");
529+
/// .unwrap()
530+
/// .tracer("trace_demo");
526531
///
527532
/// // Create a layer with the configured tracer
528533
/// let otel_layer = OpenTelemetryLayer::new(tracer);
@@ -561,12 +566,17 @@ where
561566
/// ```no_run
562567
/// use tracing_subscriber::layer::SubscriberExt;
563568
/// use tracing_subscriber::Registry;
569+
/// use opentelemetry::trace::TracerProvider;
570+
///
571+
/// // Create an OTLP pipeline exporter for a `trace_demo` service.
564572
///
565-
/// // Create a jaeger exporter pipeline for a `trace_demo` service.
566-
/// let tracer = opentelemetry_jaeger::new_agent_pipeline()
567-
/// .with_service_name("trace_demo")
573+
/// let otlp_exporter = opentelemetry_otlp::new_exporter().tonic();
574+
/// let tracer = opentelemetry_otlp::new_pipeline()
575+
/// .tracing()
576+
/// .with_exporter(otlp_exporter)
568577
/// .install_simple()
569-
/// .expect("Error initializing Jaeger exporter");
578+
/// .unwrap()
579+
/// .tracer("trace_demo");
570580
///
571581
/// // Create a layer with the configured tracer
572582
/// let otel_layer = tracing_opentelemetry::layer().with_tracer(tracer);

src/tracer.rs

+10-17
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use opentelemetry::{
66
},
77
Context as OtelContext,
88
};
9-
use opentelemetry_sdk::trace::{Tracer as SdkTracer, TracerProvider as SdkTracerProvider};
9+
use opentelemetry_sdk::trace::{IdGenerator, Tracer as SdkTracer};
1010

1111
/// An interface for authors of OpenTelemetry SDKs to build pre-sampled tracers.
1212
///
@@ -65,21 +65,18 @@ impl PreSampledTracer for noop::NoopTracer {
6565

6666
impl PreSampledTracer for SdkTracer {
6767
fn sampled_context(&self, data: &mut crate::OtelData) -> OtelContext {
68-
// Ensure tracing pipeline is still installed.
69-
let Some(provider) = self.provider() else {
70-
return OtelContext::new();
71-
};
7268
let parent_cx = &data.parent_cx;
7369
let builder = &mut data.builder;
7470

7571
// Gather trace state
76-
let (trace_id, parent_trace_flags) = current_trace_state(builder, parent_cx, &provider);
72+
let (trace_id, parent_trace_flags) =
73+
current_trace_state(builder, parent_cx, self.id_generator());
7774

7875
// Sample or defer to existing sampling decisions
7976
let (flags, trace_state) = if let Some(result) = &builder.sampling_result {
8077
process_sampling_result(result, parent_trace_flags)
8178
} else {
82-
builder.sampling_result = Some(provider.config().sampler.should_sample(
79+
builder.sampling_result = Some(self.should_sample().should_sample(
8380
Some(parent_cx),
8481
trace_id,
8582
&builder.name,
@@ -101,22 +98,18 @@ impl PreSampledTracer for SdkTracer {
10198
}
10299

103100
fn new_trace_id(&self) -> otel::TraceId {
104-
self.provider()
105-
.map(|provider| provider.config().id_generator.new_trace_id())
106-
.unwrap_or(otel::TraceId::INVALID)
101+
self.id_generator().new_trace_id()
107102
}
108103

109104
fn new_span_id(&self) -> otel::SpanId {
110-
self.provider()
111-
.map(|provider| provider.config().id_generator.new_span_id())
112-
.unwrap_or(otel::SpanId::INVALID)
105+
self.id_generator().new_span_id()
113106
}
114107
}
115108

116109
fn current_trace_state(
117110
builder: &SpanBuilder,
118111
parent_cx: &OtelContext,
119-
provider: &SdkTracerProvider,
112+
id_generator: &dyn IdGenerator,
120113
) -> (TraceId, TraceFlags) {
121114
if parent_cx.has_active_span() {
122115
let span = parent_cx.span();
@@ -126,7 +119,7 @@ fn current_trace_state(
126119
(
127120
builder
128121
.trace_id
129-
.unwrap_or_else(|| provider.config().id_generator.new_trace_id()),
122+
.unwrap_or_else(|| id_generator.new_trace_id()),
130123
Default::default(),
131124
)
132125
}
@@ -159,7 +152,7 @@ mod tests {
159152
use super::*;
160153
use crate::OtelData;
161154
use opentelemetry::trace::TracerProvider as _;
162-
use opentelemetry_sdk::trace::{config, Sampler, TracerProvider};
155+
use opentelemetry_sdk::trace::{Config, Sampler, TracerProvider};
163156

164157
#[test]
165158
fn assigns_default_trace_id_if_missing() {
@@ -203,7 +196,7 @@ mod tests {
203196
fn sampled_context() {
204197
for (name, sampler, parent_cx, previous_sampling_result, is_sampled) in sampler_data() {
205198
let provider = TracerProvider::builder()
206-
.with_config(config().with_sampler(sampler))
199+
.with_config(Config::default().with_sampler(sampler))
207200
.build();
208201
let tracer = provider.tracer("test");
209202
let mut builder = SpanBuilder::from_name("parent".to_string());

tests/metrics_publishing.rs

+11-6
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ use opentelemetry_sdk::{
66
AggregationSelector, DefaultAggregationSelector, DefaultTemporalitySelector,
77
MetricReader, TemporalitySelector,
88
},
9-
InstrumentKind, ManualReader, MeterProviderBuilder, SdkMeterProvider,
9+
AttributeSet, InstrumentKind, ManualReader, MeterProviderBuilder, SdkMeterProvider,
1010
},
11-
AttributeSet, Resource,
11+
Resource,
1212
};
1313

1414
use std::{fmt::Debug, sync::Arc};
@@ -563,7 +563,12 @@ fn init_subscriber<T>(
563563
expected_metric_name,
564564
expected_instrument_kind,
565565
expected_value,
566-
expected_attributes,
566+
expected_attributes: expected_attributes.map(|attrs| {
567+
attrs
568+
.iter()
569+
.map(|(k, v)| KeyValue::new(k.clone(), v.clone()))
570+
.collect()
571+
}),
567572
reader,
568573
_meter_provider: provider.clone(),
569574
};
@@ -613,7 +618,7 @@ struct TestExporter<T> {
613618
expected_metric_name: String,
614619
expected_instrument_kind: InstrumentKind,
615620
expected_value: T,
616-
expected_attributes: Option<AttributeSet>,
621+
expected_attributes: Option<Vec<KeyValue>>,
617622
reader: TestReader,
618623
_meter_provider: SdkMeterProvider,
619624
}
@@ -654,7 +659,7 @@ where
654659

655660
if let Some(expected_attributes) = self.expected_attributes.as_ref() {
656661
sum.data_points.iter().for_each(|data_point| {
657-
assert_eq!(expected_attributes, &data_point.attributes,)
662+
assert_eq!(expected_attributes, &data_point.attributes)
658663
});
659664
}
660665
}
@@ -672,7 +677,7 @@ where
672677

673678
if let Some(expected_attributes) = self.expected_attributes.as_ref() {
674679
gauge.data_points.iter().for_each(|data_point| {
675-
assert_eq!(expected_attributes, &data_point.attributes,)
680+
assert_eq!(expected_attributes, &data_point.attributes)
676681
});
677682
}
678683
}

tests/parallel.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,18 @@ fn test_tracer() -> (
3232
impl Subscriber + Clone,
3333
) {
3434
let exporter = TestExporter::default();
35+
let mut config = Config::default();
36+
config.span_limits = SpanLimits {
37+
max_events_per_span: u32::MAX,
38+
..SpanLimits::default()
39+
};
40+
3541
let provider = TracerProvider::builder()
3642
.with_simple_exporter(exporter.clone())
37-
.with_config(Config {
38-
span_limits: SpanLimits {
39-
max_events_per_span: u32::MAX,
40-
..SpanLimits::default()
41-
},
42-
..Config::default()
43-
})
43+
.with_config(config)
4444
.build();
45-
let tracer = provider.tracer("test");
4645

46+
let tracer = provider.tracer("test");
4747
let subscriber = tracing_subscriber::registry()
4848
.with(
4949
layer()

0 commit comments

Comments
 (0)