Skip to content

Commit 6752932

Browse files
committed
chore: update opentelemetry dependencies to 0.27.0
NoopMeterProvider is no longer publicised by upstream opentelemetry crate, so benches/metrics.rs now includes its own implementation. Enable 'spec_unstable_metrics_views' for opentelemetry crate, so examples/opentelemetry-otlp.rs still works.
1 parent 95f9ab9 commit 6752932

7 files changed

+111
-82
lines changed

Cargo.toml

+7-7
Original file line numberDiff line numberDiff line change
@@ -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.26", default-features = false, features = ["trace"] }
27-
opentelemetry_sdk = { version = "0.26", default-features = false, features = ["trace"] }
26+
opentelemetry = { version = "0.27.0", default-features = false, features = ["trace"] }
27+
opentelemetry_sdk = { version = "0.27.0", 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,11 +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.26", features = ["trace", "metrics"] }
45-
opentelemetry_sdk = { version = "0.26", default-features = false, features = ["trace", "rt-tokio"] }
46-
opentelemetry-stdout = { version = "0.26", features = ["trace", "metrics"] }
47-
opentelemetry-otlp = { version = "0.26", features = ["metrics"] }
48-
opentelemetry-semantic-conventions = { version = "0.26", features = ["semconv_experimental"] }
44+
opentelemetry = { version = "0.27.0", features = ["trace", "metrics"] }
45+
opentelemetry_sdk = { version = "0.27.0", default-features = false, features = ["trace", "rt-tokio", "spec_unstable_metrics_views"] }
46+
opentelemetry-stdout = { version = "0.27.0", features = ["trace", "metrics"] }
47+
opentelemetry-otlp = { version = "0.27.0", features = ["metrics"] }
48+
opentelemetry-semantic-conventions = { version = "0.27.0", features = ["semconv_experimental"] }
4949
futures-util = { version = "0.3.17", default-features = false }
5050
tokio = { version = "1", features = ["full"] }
5151
tokio-stream = "0.1"

benches/metrics.rs

+35-10
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,35 @@
11
use criterion::{criterion_group, criterion_main, Criterion};
2-
use opentelemetry::metrics::noop::NoopMeterProvider;
32
#[cfg(not(target_os = "windows"))]
43
use pprof::criterion::{Output, PProfProfiler};
54
use tracing_opentelemetry::MetricsLayer;
65
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
76

7+
// OpenTelemetry crate no longer publishes their NoopMeterProvider,
8+
// so we just implement our own here.
9+
mod noop {
10+
use opentelemetry::metrics::{InstrumentProvider, Meter, MeterProvider};
11+
12+
#[derive(Default)]
13+
pub struct NoopMeterProvider {
14+
_private: (),
15+
}
16+
17+
impl MeterProvider for NoopMeterProvider {
18+
fn meter_with_scope(&self, _: opentelemetry::InstrumentationScope) -> Meter {
19+
Meter::new(std::sync::Arc::new(NoopMeter::default()))
20+
}
21+
}
22+
23+
#[derive(Default)]
24+
pub struct NoopMeter {
25+
_private: (),
26+
}
27+
28+
impl InstrumentProvider for NoopMeter {}
29+
}
30+
31+
use noop::*;
32+
833
fn metrics_events(c: &mut Criterion) {
934
let mut group = c.benchmark_group("otel_metrics_events");
1035
{
@@ -18,7 +43,7 @@ fn metrics_events(c: &mut Criterion) {
1843

1944
{
2045
let _subscriber = tracing_subscriber::registry()
21-
.with(MetricsLayer::new(NoopMeterProvider::new()))
46+
.with(MetricsLayer::new(NoopMeterProvider::default()))
2247
.set_default();
2348
group.bench_function("metrics_events_0_attr_0", |b| {
2449
b.iter(|| {
@@ -29,7 +54,7 @@ fn metrics_events(c: &mut Criterion) {
2954

3055
{
3156
let _subscriber = tracing_subscriber::registry()
32-
.with(MetricsLayer::new(NoopMeterProvider::new()))
57+
.with(MetricsLayer::new(NoopMeterProvider::default()))
3358
.set_default();
3459
group.bench_function("metrics_events_1_attr_0", |b| {
3560
b.iter(|| {
@@ -40,7 +65,7 @@ fn metrics_events(c: &mut Criterion) {
4065

4166
{
4267
let _subscriber = tracing_subscriber::registry()
43-
.with(MetricsLayer::new(NoopMeterProvider::new()))
68+
.with(MetricsLayer::new(NoopMeterProvider::default()))
4469
.set_default();
4570
group.bench_function("metrics_events_2_attr_0", |b| {
4671
b.iter(|| {
@@ -51,7 +76,7 @@ fn metrics_events(c: &mut Criterion) {
5176

5277
{
5378
let _subscriber = tracing_subscriber::registry()
54-
.with(MetricsLayer::new(NoopMeterProvider::new()))
79+
.with(MetricsLayer::new(NoopMeterProvider::default()))
5580
.set_default();
5681
group.bench_function("metrics_events_4_attr_0", |b| {
5782
b.iter(|| {
@@ -68,7 +93,7 @@ fn metrics_events(c: &mut Criterion) {
6893

6994
{
7095
let _subscriber = tracing_subscriber::registry()
71-
.with(MetricsLayer::new(NoopMeterProvider::new()))
96+
.with(MetricsLayer::new(NoopMeterProvider::default()))
7297
.set_default();
7398
group.bench_function("metrics_events_8_attr_0", |b| {
7499
b.iter(|| {
@@ -89,7 +114,7 @@ fn metrics_events(c: &mut Criterion) {
89114

90115
{
91116
let _subscriber = tracing_subscriber::registry()
92-
.with(MetricsLayer::new(NoopMeterProvider::new()))
117+
.with(MetricsLayer::new(NoopMeterProvider::default()))
93118
.set_default();
94119
group.bench_function("metrics_events_1_attr_1", |b| {
95120
b.iter(|| {
@@ -100,7 +125,7 @@ fn metrics_events(c: &mut Criterion) {
100125

101126
{
102127
let _subscriber = tracing_subscriber::registry()
103-
.with(MetricsLayer::new(NoopMeterProvider::new()))
128+
.with(MetricsLayer::new(NoopMeterProvider::default()))
104129
.set_default();
105130
group.bench_function("metrics_events_1_attr_2", |b| {
106131
b.iter(|| {
@@ -116,7 +141,7 @@ fn metrics_events(c: &mut Criterion) {
116141

117142
{
118143
let _subscriber = tracing_subscriber::registry()
119-
.with(MetricsLayer::new(NoopMeterProvider::new()))
144+
.with(MetricsLayer::new(NoopMeterProvider::default()))
120145
.set_default();
121146
group.bench_function("metrics_events_1_attr_4", |b| {
122147
b.iter(|| {
@@ -134,7 +159,7 @@ fn metrics_events(c: &mut Criterion) {
134159

135160
{
136161
let _subscriber = tracing_subscriber::registry()
137-
.with(MetricsLayer::new(NoopMeterProvider::new()))
162+
.with(MetricsLayer::new(NoopMeterProvider::default()))
138163
.set_default();
139164
group.bench_function("metrics_events_1_attr_8", |b| {
140165
b.iter(|| {

examples/opentelemetry-error.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ use std::{
66
time::{Duration, SystemTime},
77
};
88

9-
use opentelemetry::{global, trace::TracerProvider};
10-
9+
use opentelemetry::global;
10+
use opentelemetry::trace::TracerProvider as _;
1111
use opentelemetry_sdk::{
1212
self as sdk,
1313
export::trace::{ExportResult, SpanExporter},
@@ -59,9 +59,8 @@ fn double_failable_work(fail: bool) -> Result<&'static str, Error> {
5959
fn main() -> Result<(), Box<dyn StdError + Send + Sync + 'static>> {
6060
let builder = sdk::trace::TracerProvider::builder().with_simple_exporter(WriterExporter);
6161
let provider = builder.build();
62-
let tracer = provider
63-
.tracer_builder("opentelemetry-write-exporter")
64-
.build();
62+
let tracer = provider.tracer("opentelemetry-write-exporter");
63+
6564
global::set_tracer_provider(provider);
6665

6766
let opentelemetry = tracing_opentelemetry::layer().with_tracer(tracer);

examples/opentelemetry-otlp.rs

+19-15
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
use opentelemetry::{global, trace::TracerProvider, Key, KeyValue};
1+
use opentelemetry::{global, trace::TracerProvider as _, Key, KeyValue};
22
use opentelemetry_sdk::{
33
metrics::{
4-
reader::DefaultTemporalitySelector, Aggregation, Instrument, MeterProviderBuilder,
5-
PeriodicReader, SdkMeterProvider, Stream,
4+
Aggregation, Instrument, MeterProviderBuilder, PeriodicReader, SdkMeterProvider, Stream,
65
},
76
runtime,
8-
trace::{BatchConfig, RandomIdGenerator, Sampler, Tracer},
7+
trace::{RandomIdGenerator, Sampler, Tracer, TracerProvider},
98
Resource,
109
};
1110
use opentelemetry_semantic_conventions::{
@@ -30,9 +29,10 @@ fn resource() -> Resource {
3029

3130
// Construct MeterProvider for MetricsLayer
3231
fn init_meter_provider() -> SdkMeterProvider {
33-
let exporter = opentelemetry_otlp::new_exporter()
34-
.tonic()
35-
.build_metrics_exporter(Box::new(DefaultTemporalitySelector::new()))
32+
let exporter = opentelemetry_otlp::MetricExporter::builder()
33+
.with_tonic()
34+
.with_temporality(opentelemetry_sdk::metrics::Temporality::default())
35+
.build()
3636
.unwrap();
3737

3838
let reader = PeriodicReader::builder(exporter, runtime::Tokio)
@@ -41,11 +41,13 @@ fn init_meter_provider() -> SdkMeterProvider {
4141

4242
// For debugging in development
4343
let stdout_reader = PeriodicReader::builder(
44-
opentelemetry_stdout::MetricsExporter::default(),
44+
opentelemetry_stdout::MetricExporter::default(),
4545
runtime::Tokio,
4646
)
4747
.build();
4848

49+
// NOTE: Views are gated behind opentelemetry's `spec_unstable_metrics_views` feature.
50+
// If you need to use views in your crate, remember to enable the feature!
4951
// Rename foo metrics to foo_named and drop key_2 attribute
5052
let view_foo = |instrument: &Instrument| -> Option<Stream> {
5153
if instrument.name == "foo" {
@@ -90,9 +92,13 @@ fn init_meter_provider() -> SdkMeterProvider {
9092

9193
// Construct Tracer for OpenTelemetryLayer
9294
fn init_tracer() -> Tracer {
93-
let provider = opentelemetry_otlp::new_pipeline()
94-
.tracing()
95-
.with_trace_config(
95+
let exporter = opentelemetry_otlp::SpanExporter::builder()
96+
.with_tonic()
97+
.build()
98+
.unwrap();
99+
100+
let provider = TracerProvider::builder()
101+
.with_config(
96102
opentelemetry_sdk::trace::Config::default()
97103
// Customize sampling strategy
98104
.with_sampler(Sampler::ParentBased(Box::new(Sampler::TraceIdRatioBased(
@@ -102,10 +108,8 @@ fn init_tracer() -> Tracer {
102108
.with_id_generator(RandomIdGenerator::default())
103109
.with_resource(resource()),
104110
)
105-
.with_batch_config(BatchConfig::default())
106-
.with_exporter(opentelemetry_otlp::new_exporter().tonic())
107-
.install_batch(runtime::Tokio)
108-
.unwrap();
111+
.with_batch_exporter(exporter, runtime::Tokio)
112+
.build();
109113

110114
global::set_tracer_provider(provider.clone());
111115
provider.tracer("tracing-otel-subscriber")

src/layer.rs

+17-13
Original file line numberDiff line numberDiff line change
@@ -536,17 +536,19 @@ where
536536
/// ```no_run
537537
/// use tracing_opentelemetry::OpenTelemetryLayer;
538538
/// use tracing_subscriber::layer::SubscriberExt;
539-
/// use opentelemetry::trace::TracerProvider;
539+
/// use opentelemetry::trace::TracerProvider as _;
540540
/// use tracing_subscriber::Registry;
541541
///
542542
/// // Create an OTLP pipeline exporter for a `trace_demo` service.
543543
///
544-
/// let otlp_exporter = opentelemetry_otlp::new_exporter().tonic();
545-
/// let tracer = opentelemetry_otlp::new_pipeline()
546-
/// .tracing()
547-
/// .with_exporter(otlp_exporter)
548-
/// .install_simple()
549-
/// .unwrap()
544+
/// let otlp_exporter = opentelemetry_otlp::SpanExporter::builder()
545+
/// .with_tonic()
546+
/// .build()
547+
/// .unwrap();
548+
///
549+
/// let tracer = opentelemetry_sdk::trace::TracerProvider::builder()
550+
/// .with_simple_exporter(otlp_exporter)
551+
/// .build()
550552
/// .tracer("trace_demo");
551553
///
552554
/// // Create a layer with the configured tracer
@@ -591,12 +593,14 @@ where
591593
///
592594
/// // Create an OTLP pipeline exporter for a `trace_demo` service.
593595
///
594-
/// let otlp_exporter = opentelemetry_otlp::new_exporter().tonic();
595-
/// let tracer = opentelemetry_otlp::new_pipeline()
596-
/// .tracing()
597-
/// .with_exporter(otlp_exporter)
598-
/// .install_simple()
599-
/// .unwrap()
596+
/// let otlp_exporter = opentelemetry_otlp::SpanExporter::builder()
597+
/// .with_tonic()
598+
/// .build()
599+
/// .unwrap();
600+
///
601+
/// let tracer = opentelemetry_sdk::trace::TracerProvider::builder()
602+
/// .with_simple_exporter(otlp_exporter)
603+
/// .build()
600604
/// .tracer("trace_demo");
601605
///
602606
/// // Create a layer with the configured tracer

src/metrics.rs

+11-12
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use tracing_core::{Field, Interest, Metadata};
66
use opentelemetry::metrics::Gauge;
77
use opentelemetry::{
88
metrics::{Counter, Histogram, Meter, MeterProvider, UpDownCounter},
9-
KeyValue, Value,
9+
InstrumentationScope, KeyValue, Value,
1010
};
1111
use tracing_subscriber::{
1212
filter::Filtered,
@@ -98,47 +98,47 @@ impl Instruments {
9898
update_or_insert(
9999
&self.u64_counter,
100100
metric_name,
101-
|| meter.u64_counter(metric_name).init(),
101+
|| meter.u64_counter(metric_name).build(),
102102
|ctr| ctr.add(value, attributes),
103103
);
104104
}
105105
InstrumentType::CounterF64(value) => {
106106
update_or_insert(
107107
&self.f64_counter,
108108
metric_name,
109-
|| meter.f64_counter(metric_name).init(),
109+
|| meter.f64_counter(metric_name).build(),
110110
|ctr| ctr.add(value, attributes),
111111
);
112112
}
113113
InstrumentType::UpDownCounterI64(value) => {
114114
update_or_insert(
115115
&self.i64_up_down_counter,
116116
metric_name,
117-
|| meter.i64_up_down_counter(metric_name).init(),
117+
|| meter.i64_up_down_counter(metric_name).build(),
118118
|ctr| ctr.add(value, attributes),
119119
);
120120
}
121121
InstrumentType::UpDownCounterF64(value) => {
122122
update_or_insert(
123123
&self.f64_up_down_counter,
124124
metric_name,
125-
|| meter.f64_up_down_counter(metric_name).init(),
125+
|| meter.f64_up_down_counter(metric_name).build(),
126126
|ctr| ctr.add(value, attributes),
127127
);
128128
}
129129
InstrumentType::HistogramU64(value) => {
130130
update_or_insert(
131131
&self.u64_histogram,
132132
metric_name,
133-
|| meter.u64_histogram(metric_name).init(),
133+
|| meter.u64_histogram(metric_name).build(),
134134
|rec| rec.record(value, attributes),
135135
);
136136
}
137137
InstrumentType::HistogramF64(value) => {
138138
update_or_insert(
139139
&self.f64_histogram,
140140
metric_name,
141-
|| meter.f64_histogram(metric_name).init(),
141+
|| meter.f64_histogram(metric_name).build(),
142142
|rec| rec.record(value, attributes),
143143
);
144144
}
@@ -395,11 +395,10 @@ where
395395
where
396396
M: MeterProvider,
397397
{
398-
let meter = meter_provider.versioned_meter(
399-
INSTRUMENTATION_LIBRARY_NAME,
400-
Some(CARGO_PKG_VERSION),
401-
None::<&'static str>,
402-
None,
398+
let meter = meter_provider.meter_with_scope(
399+
InstrumentationScope::builder(INSTRUMENTATION_LIBRARY_NAME)
400+
.with_version(CARGO_PKG_VERSION)
401+
.build(),
403402
);
404403

405404
let layer = InstrumentLayer {

0 commit comments

Comments
 (0)