From 4a1959c060518e93484806f75552156c521a6d3c Mon Sep 17 00:00:00 2001 From: Dirkjan Ochtman Date: Mon, 26 Feb 2024 09:36:25 +0100 Subject: [PATCH 1/6] Remove Jaeger example The Jaeger crate is soft-deprecated in favor of using the OTLP protocol to talk to Jaeger. Since we already have an otlp example here, remove the Jaeger example. --- examples/opentelemetry.rs | 48 --------------------------------------- 1 file changed, 48 deletions(-) delete mode 100644 examples/opentelemetry.rs diff --git a/examples/opentelemetry.rs b/examples/opentelemetry.rs deleted file mode 100644 index 23dc9a3..0000000 --- a/examples/opentelemetry.rs +++ /dev/null @@ -1,48 +0,0 @@ -use opentelemetry::global; -use std::{error::Error, thread, time::Duration}; -use tracing::{instrument, span, trace, warn}; -use tracing_subscriber::prelude::*; - -#[instrument] -#[inline] -fn expensive_work() -> &'static str { - span!(tracing::Level::INFO, "expensive_step_1") - .in_scope(|| thread::sleep(Duration::from_millis(25))); - span!(tracing::Level::INFO, "expensive_step_2") - .in_scope(|| thread::sleep(Duration::from_millis(25))); - - "success" -} - -fn main() -> Result<(), Box> { - // Install an otel pipeline with a simple span processor that exports data one at a time when - // spans end. See the `install_batch` option on each exporter's pipeline builder to see how to - // export in batches. - let tracer = opentelemetry_jaeger::new_agent_pipeline() - .with_service_name("report_example") - .install_simple()?; - let opentelemetry = tracing_opentelemetry::layer().with_tracer(tracer); - tracing_subscriber::registry() - .with(opentelemetry) - .try_init()?; - - { - let root = span!(tracing::Level::INFO, "app_start", work_units = 2); - let _enter = root.enter(); - - let work_result = expensive_work(); - - span!(tracing::Level::INFO, "faster_work") - .in_scope(|| thread::sleep(Duration::from_millis(10))); - - warn!("About to exit!"); - trace!("status: {}", work_result); - } // Once this scope is closed, all spans inside are closed as well - - // Shut down the current tracer provider. This will invoke the shutdown - // method on all span processors. span processors should export remaining - // spans before return. - global::shutdown_tracer_provider(); - - Ok(()) -} From 2effc13c9c5ed4c4327b8fa4d1c203a1584f14ea Mon Sep 17 00:00:00 2001 From: Dirkjan Ochtman Date: Sun, 25 Feb 2024 20:33:31 +0100 Subject: [PATCH 2/6] Upgrade to opentelemetry 0.22 --- Cargo.toml | 16 ++++++++-------- examples/opentelemetry-otlp.rs | 8 ++++---- src/metrics.rs | 6 +++--- tests/metrics_publishing.rs | 11 ++++++----- tests/trace_state_propagation.rs | 4 ++-- 5 files changed, 23 insertions(+), 22 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 727f7b3..190be54 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,8 +25,8 @@ default = ["tracing-log", "metrics"] metrics = ["opentelemetry/metrics","opentelemetry_sdk/metrics", "smallvec"] [dependencies] -opentelemetry = { version = "0.21.0", default-features = false, features = ["trace"] } -opentelemetry_sdk = { version = "0.21.0", default-features = false, features = ["trace"] } +opentelemetry = { version = "0.22.0", default-features = false, features = ["trace"] } +opentelemetry_sdk = { version = "0.22.0", default-features = false, features = ["trace"] } tracing = { version = "0.1.35", default-features = false, features = ["std"] } tracing-core = "0.1.28" tracing-subscriber = { version = "0.3.0", default-features = false, features = ["registry", "std"] } @@ -41,12 +41,12 @@ smallvec = { version = "1.0", optional = true } [dev-dependencies] async-trait = "0.1.56" criterion = { version = "0.5.1", default-features = false, features = ["html_reports"] } -opentelemetry = { version = "0.21.0", features = ["trace", "metrics"] } -opentelemetry_sdk = { version = "0.21.0", default-features = false, features = ["trace", "rt-tokio"] } -opentelemetry-jaeger = "0.20.0" -opentelemetry-stdout = { version = "0.2.0", features = ["trace", "metrics"] } -opentelemetry-otlp = { version = "0.14.0", features = ["metrics"] } -opentelemetry-semantic-conventions = "0.13.0" +opentelemetry = { version = "0.22.0", features = ["trace", "metrics"] } +opentelemetry_sdk = { version = "0.22.0", default-features = false, features = ["trace", "rt-tokio"] } +opentelemetry-jaeger = "0.21.0" +opentelemetry-stdout = { version = "0.3.0", features = ["trace", "metrics"] } +opentelemetry-otlp = { version = "0.15.0", features = ["metrics"] } +opentelemetry-semantic-conventions = "0.14.0" futures-util = { version = "0.3", default-features = false } tokio = { version = "1", features = ["full"] } tokio-stream = "0.1" diff --git a/examples/opentelemetry-otlp.rs b/examples/opentelemetry-otlp.rs index 77eb167..1355570 100644 --- a/examples/opentelemetry-otlp.rs +++ b/examples/opentelemetry-otlp.rs @@ -2,7 +2,7 @@ use opentelemetry::{global, Key, KeyValue}; use opentelemetry_sdk::{ metrics::{ reader::{DefaultAggregationSelector, DefaultTemporalitySelector}, - Aggregation, Instrument, MeterProvider, PeriodicReader, Stream, + Aggregation, Instrument, MeterProviderBuilder, PeriodicReader, SdkMeterProvider, Stream, }, runtime, trace::{BatchConfig, RandomIdGenerator, Sampler, Tracer}, @@ -29,7 +29,7 @@ fn resource() -> Resource { } // Construct MeterProvider for MetricsLayer -fn init_meter_provider() -> MeterProvider { +fn init_meter_provider() -> SdkMeterProvider { let exporter = opentelemetry_otlp::new_exporter() .tonic() .build_metrics_exporter( @@ -78,7 +78,7 @@ fn init_meter_provider() -> MeterProvider { } }; - let meter_provider = MeterProvider::builder() + let meter_provider = MeterProviderBuilder::default() .with_resource(resource()) .with_reader(reader) .with_reader(stdout_reader) @@ -128,7 +128,7 @@ fn init_tracing_subscriber() -> OtelGuard { } struct OtelGuard { - meter_provider: MeterProvider, + meter_provider: SdkMeterProvider, } impl Drop for OtelGuard { diff --git a/src/metrics.rs b/src/metrics.rs index 567f599..5151720 100644 --- a/src/metrics.rs +++ b/src/metrics.rs @@ -218,12 +218,12 @@ impl<'a> Visit for MetricVisitor<'a> { /// use tracing_opentelemetry::MetricsLayer; /// use tracing_subscriber::layer::SubscriberExt; /// use tracing_subscriber::Registry; -/// # use opentelemetry_sdk::metrics::MeterProvider; +/// # use opentelemetry_sdk::metrics::SdkMeterProvider; /// /// // Constructing a MeterProvider is out-of-scope for the docs here, but there /// // are examples in the opentelemetry repository. See: /// // https://github.com/open-telemetry/opentelemetry-rust/blob/dfeac078ff7853e7dc814778524b93470dfa5c9c/examples/metrics-basic/src/main.rs#L7 -/// # let meter_provider: MeterProvider = unimplemented!(); +/// # let meter_provider: SdkMeterProvider = unimplemented!(); /// /// let opentelemetry_metrics = MetricsLayer::new(meter_provider); /// let subscriber = Registry::default().with(opentelemetry_metrics); @@ -305,7 +305,7 @@ impl<'a> Visit for MetricVisitor<'a> { /// # use tracing::info; /// // adds attributes bar="baz" and qux=2 to the `foo` counter. /// info!(monotonic_counter.foo = 1, bar = "baz", qux = 2); -/// ``` +/// ``` /// /// # Implementation Details /// diff --git a/tests/metrics_publishing.rs b/tests/metrics_publishing.rs index cf1fe17..f847b58 100644 --- a/tests/metrics_publishing.rs +++ b/tests/metrics_publishing.rs @@ -1,13 +1,12 @@ use opentelemetry::{metrics::MetricsError, KeyValue}; use opentelemetry_sdk::{ metrics::{ - data, - data::{Histogram, Sum}, + data::{self, Histogram, Sum}, reader::{ AggregationSelector, DefaultAggregationSelector, DefaultTemporalitySelector, MetricReader, TemporalitySelector, }, - InstrumentKind, ManualReader, MeterProvider, + InstrumentKind, ManualReader, MeterProviderBuilder, SdkMeterProvider, }, AttributeSet, Resource, }; @@ -416,7 +415,9 @@ fn init_subscriber( inner: Arc::new(reader), }; - let provider = MeterProvider::builder().with_reader(reader.clone()).build(); + let provider = MeterProviderBuilder::default() + .with_reader(reader.clone()) + .build(); let exporter = TestExporter { expected_metric_name, expected_instrument_kind, @@ -473,7 +474,7 @@ struct TestExporter { expected_value: T, expected_attributes: Option, reader: TestReader, - _meter_provider: MeterProvider, + _meter_provider: SdkMeterProvider, } impl TestExporter diff --git a/tests/trace_state_propagation.rs b/tests/trace_state_propagation.rs index a020a74..70ba836 100644 --- a/tests/trace_state_propagation.rs +++ b/tests/trace_state_propagation.rs @@ -1,12 +1,12 @@ use futures_util::future::BoxFuture; use opentelemetry::{ - propagation::TextMapPropagator, + propagation::{TextMapCompositePropagator, TextMapPropagator}, trace::{SpanContext, TraceContextExt, Tracer as _, TracerProvider as _}, Context, }; use opentelemetry_sdk::{ export::trace::{ExportResult, SpanData, SpanExporter}, - propagation::{BaggagePropagator, TextMapCompositePropagator, TraceContextPropagator}, + propagation::{BaggagePropagator, TraceContextPropagator}, trace::{Tracer, TracerProvider}, }; use std::collections::{HashMap, HashSet}; From 66e3539cbcd9822762afca466a923c7fe310df58 Mon Sep 17 00:00:00 2001 From: Dirkjan Ochtman Date: Mon, 26 Feb 2024 10:03:44 +0100 Subject: [PATCH 3/6] Clean up duplicate imports --- src/layer.rs | 8 +------- src/tracer.rs | 2 +- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/layer.rs b/src/layer.rs index dc3203a..c57ffe2 100644 --- a/src/layer.rs +++ b/src/layer.rs @@ -1212,18 +1212,12 @@ fn thread_id_integer(id: thread::ThreadId) -> u64 { #[cfg(test)] mod tests { use super::*; - use crate::OtelData; - use opentelemetry::{ - trace::{noop, TraceFlags}, - StringValue, - }; + use opentelemetry::trace::TraceFlags; use std::{ - borrow::Cow, collections::HashMap, error::Error, fmt::Display, sync::{Arc, Mutex}, - thread, time::SystemTime, }; use tracing_subscriber::prelude::*; diff --git a/src/tracer.rs b/src/tracer.rs index c37966b..5b1651d 100644 --- a/src/tracer.rs +++ b/src/tracer.rs @@ -158,7 +158,7 @@ fn process_sampling_result( mod tests { use super::*; use crate::OtelData; - use opentelemetry::trace::{SpanBuilder, SpanId, TracerProvider as _}; + use opentelemetry::trace::TracerProvider as _; use opentelemetry_sdk::trace::{config, Sampler, TracerProvider}; #[test] From 92d5f30e3ae94b1de21640609027328f302c73c2 Mon Sep 17 00:00:00 2001 From: Dirkjan Ochtman Date: Mon, 26 Feb 2024 10:07:03 +0100 Subject: [PATCH 4/6] Bump version requirement for futures-util opentelemetry-sdk apparently is not getting checked for minimal versions upstream, and now depends on a Stream export in the root of futures-util that didn't exist in early versions of that crate. Require 0.3.17, which appears to be the version that introduced the top-level re-exports. --- Cargo.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 190be54..e5f8c0b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,6 +35,7 @@ once_cell = "1.13.0" # Fix minimal-versions async-trait = { version = "0.1.56", optional = true } +futures-util = { version = "0.3.17", optional = true } thiserror = { version = "1.0.31", optional = true } smallvec = { version = "1.0", optional = true } @@ -47,7 +48,7 @@ opentelemetry-jaeger = "0.21.0" opentelemetry-stdout = { version = "0.3.0", features = ["trace", "metrics"] } opentelemetry-otlp = { version = "0.15.0", features = ["metrics"] } opentelemetry-semantic-conventions = "0.14.0" -futures-util = { version = "0.3", default-features = false } +futures-util = { version = "0.3.17", default-features = false } tokio = { version = "1", features = ["full"] } tokio-stream = "0.1" tracing = { version = "0.1.35", default-features = false, features = ["std", "attributes"] } From 8c4e370def89b26e9970ab69eb2502003efedf0d Mon Sep 17 00:00:00 2001 From: Dirkjan Ochtman Date: Mon, 26 Feb 2024 22:34:09 +0100 Subject: [PATCH 5/6] Add changelog entry --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca7fddd..ee31a16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +# 0.23.0 (February 26, 2024) + +### Breaking Changes + +- Upgrade to opentelemetry 0.22. Refer to the upstream + [changelog](https://github.com/open-telemetry/opentelemetry-rust/releases/tag/v0.22.0) + for more information. In particular, i64 histograms will silently downgrade to + key/value exports. + # 0.22.0 (November 7, 2023) ### Breaking Changes From 6013f7490912ab81d0b112770644e85290977d64 Mon Sep 17 00:00:00 2001 From: Dirkjan Ochtman Date: Mon, 26 Feb 2024 22:34:33 +0100 Subject: [PATCH 6/6] Bump version to 0.23.0 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index e5f8c0b..5f09ff6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tracing-opentelemetry" -version = "0.22.0" +version = "0.23.0" authors = [ "Julian Tescher ", "Tokio Contributors "