From 5c19ca5f04a053b58a2e887cc552b806dee1dffa Mon Sep 17 00:00:00 2001 From: Mari Date: Fri, 19 Jul 2024 14:59:14 +0200 Subject: [PATCH 1/9] update to opentelemetry 0.24 --- .github/workflows/ci.yml | 6 ++--- CHANGELOG.md | 2 +- autometrics/Cargo.toml | 24 +++++++++---------- autometrics/build.rs | 8 +++---- autometrics/src/README.md | 4 ++-- autometrics/tests/exemplars_test.rs | 2 +- .../Cargo.toml | 2 +- examples/opentelemetry-push-custom/Cargo.toml | 8 +++---- examples/opentelemetry-push/Cargo.toml | 2 +- 9 files changed, 29 insertions(+), 29 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a14e8bf..1c273f6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,15 +22,15 @@ jobs: - run: cargo clippy --features=metrics-0_21,prometheus-exporter - run: cargo clippy --features=prometheus-0_13 - run: cargo clippy --features=prometheus-client-0_22 - - run: cargo clippy --features=opentelemetry-0_21 + - run: cargo clippy --features=opentelemetry-0_24 # Run the tests with each of the different metrics libraries - run: cargo test --features=prometheus-exporter - run: cargo test --features=prometheus-exporter,metrics-0_21 - run: cargo test --features=prometheus-exporter,prometheus-0_13 - run: cargo test --features=prometheus-exporter,prometheus-client-0_22,exemplars-tracing - - run: cargo test --features=prometheus-exporter,prometheus-client-0_22,exemplars-tracing-opentelemetry-0_22 - - run: cargo test --features=prometheus-exporter,opentelemetry-0_21 + - run: cargo test --features=prometheus-exporter,prometheus-client-0_22,exemplars-tracing-opentelemetry-0_24 + - run: cargo test --features=prometheus-exporter,opentelemetry-0_24 # Build the crate using the other optional features - run: cargo build --features=metrics-0_21,custom-objective-percentile,custom-objective-latency diff --git a/CHANGELOG.md b/CHANGELOG.md index 26deec8..cf4c278 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased -- +- `opentelemetry` has been updated to v0.24 (#179) ## [1.0.1](https://github.com/autometrics-dev/autometrics-rs/releases/tag/v1.0.1) - 2024-02-12 diff --git a/autometrics/Cargo.toml b/autometrics/Cargo.toml index 798a455..f5a3205 100644 --- a/autometrics/Cargo.toml +++ b/autometrics/Cargo.toml @@ -15,16 +15,16 @@ readme = "README.md" [features] # Metrics backends metrics-0_21 = ["dep:metrics"] -opentelemetry-0_21 = ["opentelemetry/metrics", "dep:prometheus"] +opentelemetry-0_24 = ["opentelemetry/metrics", "dep:prometheus"] prometheus-0_13 = ["dep:prometheus"] prometheus-client-0_22 = ["dep:prometheus-client"] # Deprecated feature flags metrics = ["metrics-0_21"] -opentelemetry = ["opentelemetry-0_21"] +opentelemetry = ["opentelemetry-0_24"] prometheus = ["prometheus-0_13"] prometheus-client = ["prometheus-client-0_22"] -exemplars-tracing-opentelemetry = ["exemplars-tracing-opentelemetry-0_22"] +exemplars-tracing-opentelemetry = ["exemplars-tracing-opentelemetry-0_24"] # Misc prometheus-exporter = [ @@ -72,11 +72,11 @@ otel-push-exporter-async-std = [ # Exemplars exemplars-tracing = ["tracing", "tracing-subscriber"] -exemplars-tracing-opentelemetry-0_22 = [ +exemplars-tracing-opentelemetry-0_24 = [ "dep:opentelemetry", "opentelemetry_sdk/trace", "tracing", - "dep:tracing-opentelemetry-0-22", + "dep:tracing-opentelemetry-0-24", ] # Custom objectives @@ -91,7 +91,7 @@ spez = "0.1.2" thiserror = "1" # Used for opentelemetry feature -opentelemetry = { version = "0.21", default-features = false, optional = true } +opentelemetry = { version = "0.24", default-features = false, optional = true } # Use for metrics feature metrics = { version = "0.21", default-features = false, optional = true } @@ -99,11 +99,11 @@ metrics = { version = "0.21", default-features = false, optional = true } # Used for prometheus-exporter feature http = { version = "1.0.0", optional = true } metrics-exporter-prometheus = { version = "0.12", default-features = false, optional = true } -opentelemetry-prometheus = { version = "0.14", optional = true } -opentelemetry_sdk = { version = "0.21", default-features = false, features = [ +opentelemetry-prometheus = { version = "0.16", optional = true } +opentelemetry_sdk = { version = "0.24.1", default-features = false, features = [ "metrics", ], optional = true } -opentelemetry-otlp = { version = "0.14.0", default-features = false, optional = true } +opentelemetry-otlp = { version = "0.17", default-features = false, optional = true } prometheus = { version = "0.13", default-features = false, optional = true } # Used for prometheus-client feature @@ -116,15 +116,15 @@ tracing-subscriber = { version = "0.3", default-features = false, features = [ ], optional = true } # Used for exemplars-tracing-opentelemetry feature -tracing-opentelemetry-0-22 = { package = "tracing-opentelemetry", version = "0.22", default-features = false, optional = true } +tracing-opentelemetry-0-24 = { package = "tracing-opentelemetry", version = "0.24", default-features = false, optional = true } [dev-dependencies] async-trait = "0.1.74" axum = { version = "0.7.2", features = ["tokio"] } criterion = "0.5" http = "1.0.0" -opentelemetry = "0.21" -opentelemetry-stdout = { version = "0.2", features = ["trace"] } +opentelemetry = "0.24" +opentelemetry-stdout = { version = "0.5", features = ["trace"] } prometheus-client = "0.22" tokio = { version = "1", features = ["full"] } tracing = "0.1" diff --git a/autometrics/build.rs b/autometrics/build.rs index 34f838d..36ca01e 100644 --- a/autometrics/build.rs +++ b/autometrics/build.rs @@ -6,18 +6,18 @@ pub fn main() { #[cfg(feature = "metrics")] println!("cargo:warning=The `metrics` feature is deprecated and will be removed in the next version. Please use `metrics-0_21` instead."); #[cfg(feature = "opentelemetry")] - println!("cargo:warning=The `opentelemetry` feature is deprecated and will be removed in the next version. Please use `opentelemetry-0_21` instead."); + println!("cargo:warning=The `opentelemetry` feature is deprecated and will be removed in the next version. Please use `opentelemetry-0_24` instead."); #[cfg(feature = "prometheus")] println!("cargo:warning=The `prometheus` feature is deprecated and will be removed in the next version. Please use `prometheus-0_13` instead."); #[cfg(feature = "prometheus-client")] println!("cargo:warning=The `prometheus-client` feature is deprecated and will be removed in the next version. Please use `prometheus-client-0_22` instead."); #[cfg(feature = "exemplars-tracing-opentelemetry")] - println!("cargo:warning=The `exemplars-tracing-opentelemetry` feature is deprecated and will be removed in the next version. Please use `exemplars-tracing-opentelemetry-0_22` instead."); + println!("cargo:warning=The `exemplars-tracing-opentelemetry` feature is deprecated and will be removed in the next version. Please use `exemplars-tracing-opentelemetry-0_24` instead."); cfg_aliases! { // Backends metrics: { any(feature = "metrics", feature = "metrics-0_21") }, - opentelemetry: { any(feature = "opentelemetry", feature = "opentelemetry-0_21") }, + opentelemetry: { any(feature = "opentelemetry", feature = "opentelemetry-0_24") }, prometheus: { any(feature = "prometheus", feature = "prometheus-0_13") }, prometheus_client_feature: { any(feature = "prometheus-client", feature = "prometheus-client-0_22") }, default_backend: { all( @@ -32,7 +32,7 @@ pub fn main() { // Exemplars exemplars: { any(exemplars_tracing, exemplars_tracing_opentelemetry) }, exemplars_tracing: { feature = "exemplars-tracing" }, - exemplars_tracing_opentelemetry: { any(feature = "exemplars-tracing-opentelemetry-0_22", feature = "exemplars-tracing-opentelemetry") }, + exemplars_tracing_opentelemetry: { any(feature = "exemplars-tracing-opentelemetry-0_24", feature = "exemplars-tracing-opentelemetry") }, // Custom objectives custom_objective_percentile: { feature = "custom-objective-percentile" }, diff --git a/autometrics/src/README.md b/autometrics/src/README.md index 96fbeb7..c247d95 100644 --- a/autometrics/src/README.md +++ b/autometrics/src/README.md @@ -153,7 +153,7 @@ If you require more customization than these offered feature flags, enable just > If you are exporting metrics yourself rather than using the `prometheus-exporter`, you must ensure that you are using the exact same version of the metrics library as `autometrics` (and it must come from `crates.io` rather than git or another source). If not, the autometrics metrics will not appear in your exported metrics. -- `opentelemetry-0_21` - use the [opentelemetry](https://crates.io/crates/opentelemetry) crate for producing metrics. +- `opentelemetry-0_24` - use the [opentelemetry](https://crates.io/crates/opentelemetry) crate for producing metrics. - `metrics-0_21` - use the [metrics](https://crates.io/crates/metrics) crate for producing metrics - `prometheus-0_13` - use the [prometheus](https://crates.io/crates/prometheus) crate for producing metrics - `prometheus-client-0_22` - use the official [prometheus-client](https://crates.io/crates/prometheus-client) crate for producing metrics @@ -163,7 +163,7 @@ If you require more customization than these offered feature flags, enable just See the [exemplars module docs](https://docs.rs/autometrics/latest/autometrics/exemplars/index.html) for details about these features. Currently only supported with the `prometheus-client` backend. - `exemplars-tracing` - extract arbitrary fields from `tracing::Span`s -- `exemplars-tracing-opentelemetry-0_20` or `exemplars-tracing-opentelemetry-0_21` - extract the `trace_id` and `span_id` from the `opentelemetry::Context`, which is attached to `tracing::Span`s by the `tracing-opentelemetry` crate +- `exemplars-tracing-opentelemetry-0_24` - extract the `trace_id` and `span_id` from the `opentelemetry::Context`, which is attached to `tracing::Span`s by the `tracing-opentelemetry` crate ### Custom objective values diff --git a/autometrics/tests/exemplars_test.rs b/autometrics/tests/exemplars_test.rs index cb2d408..e1e49fc 100644 --- a/autometrics/tests/exemplars_test.rs +++ b/autometrics/tests/exemplars_test.rs @@ -70,7 +70,7 @@ fn tracing_opentelemetry_context() { let tracer = provider.tracer("test"); // This adds the OpenTelemetry Context to every tracing Span - #[cfg(feature = "exemplars-tracing-opentelemetry-0_22")] + #[cfg(feature = "exemplars-tracing-opentelemetry-0_24")] let otel_layer = tracing_opentelemetry_0_22::layer().with_tracer(tracer); let subscriber = Registry::default().with(otel_layer); diff --git a/examples/exemplars-tracing-opentelemetry/Cargo.toml b/examples/exemplars-tracing-opentelemetry/Cargo.toml index 22e7a60..91d5499 100644 --- a/examples/exemplars-tracing-opentelemetry/Cargo.toml +++ b/examples/exemplars-tracing-opentelemetry/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" autometrics = { path = "../../autometrics", features = [ "prometheus-client-0_22", "prometheus-exporter", - "exemplars-tracing-opentelemetry-0_22", + "exemplars-tracing-opentelemetry-0_24", ] } autometrics-example-util = { path = "../util" } axum = { version = "0.7.2", features = ["json"] } diff --git a/examples/opentelemetry-push-custom/Cargo.toml b/examples/opentelemetry-push-custom/Cargo.toml index 2acd3da..1e43e23 100644 --- a/examples/opentelemetry-push-custom/Cargo.toml +++ b/examples/opentelemetry-push-custom/Cargo.toml @@ -5,12 +5,12 @@ publish = false edition = "2021" [dependencies] -autometrics = { path = "../../autometrics", features = ["opentelemetry-0_21"] } +autometrics = { path = "../../autometrics", features = ["opentelemetry-0_24"] } autometrics-example-util = { path = "../util" } # Note that the version of the opentelemetry crate MUST match # the version used by autometrics -opentelemetry = { version = "0.21", features = ["metrics"] } -opentelemetry_sdk = { version = "0.21.1", features = ["metrics", "rt-tokio"] } -opentelemetry-otlp = { version = "0.14", features = ["tonic", "metrics"] } +opentelemetry = { version = "0.24", features = ["metrics"] } +opentelemetry_sdk = { version = "0.24.1", features = ["metrics", "rt-tokio"] } +opentelemetry-otlp = { version = "0.17", features = ["tonic", "metrics"] } opentelemetry-semantic-conventions = { version = "0.13" } tokio = { version = "1", features = ["full"] } diff --git a/examples/opentelemetry-push/Cargo.toml b/examples/opentelemetry-push/Cargo.toml index fd2747b..b045c93 100644 --- a/examples/opentelemetry-push/Cargo.toml +++ b/examples/opentelemetry-push/Cargo.toml @@ -5,6 +5,6 @@ publish = false edition = "2021" [dependencies] -autometrics = { path = "../../autometrics", features = ["opentelemetry-0_21", "otel-push-exporter-http", "otel-push-exporter-tokio"] } +autometrics = { path = "../../autometrics", features = ["opentelemetry-0_24", "otel-push-exporter-http", "otel-push-exporter-tokio"] } autometrics-example-util = { path = "../util" } tokio = { version = "1", features = ["full"] } From d69330f16710c7f2f1d2a045292aaf33d04ba377 Mon Sep 17 00:00:00 2001 From: Mari Date: Fri, 19 Jul 2024 15:03:04 +0200 Subject: [PATCH 2/9] replace `Unit` with the literal directly --- autometrics/src/tracker/opentelemetry.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/autometrics/src/tracker/opentelemetry.rs b/autometrics/src/tracker/opentelemetry.rs index ac0c4c6..0fa3083 100644 --- a/autometrics/src/tracker/opentelemetry.rs +++ b/autometrics/src/tracker/opentelemetry.rs @@ -3,7 +3,7 @@ use crate::__private::FunctionDescription; use crate::labels::{BuildInfoLabels, CounterLabels, GaugeLabels, HistogramLabels, Label}; use crate::{constants::*, tracker::TrackMetrics}; use once_cell::sync::Lazy; -use opentelemetry::metrics::{Counter, Histogram, Unit, UpDownCounter}; +use opentelemetry::metrics::{Counter, Histogram, UpDownCounter}; use opentelemetry::{global, KeyValue}; use std::{sync::Once, time::Instant}; @@ -19,10 +19,9 @@ static HISTOGRAM: Lazy> = Lazy::new(|| { // Note that the unit needs to be written as "s" rather than "seconds" // or it will not be included in the metric name // https://github.com/open-telemetry/opentelemetry-rust/issues/1173 - let unit = Unit::new("s"); global::meter(METER_NAME) .f64_histogram(HISTOGRAM_NAME) - .with_unit(unit) + .with_unit("s") .with_description(HISTOGRAM_DESCRIPTION) .init() }); From 651df477df3872baa9f70cc51cdc5973b36a39c6 Mon Sep 17 00:00:00 2001 From: Mari Date: Fri, 19 Jul 2024 15:13:38 +0200 Subject: [PATCH 3/9] update feature flag --- autometrics/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autometrics/src/lib.rs b/autometrics/src/lib.rs index 344f061..6806238 100644 --- a/autometrics/src/lib.rs +++ b/autometrics/src/lib.rs @@ -9,7 +9,7 @@ mod constants; #[cfg(any( feature = "exemplars-tracing", feature = "exemplars-tracing-opentelemetry", - feature = "exemplars-tracing-opentelemetry-0_22", + feature = "exemplars-tracing-opentelemetry-0_24", ))] pub mod exemplars; mod labels; From 7b86a8be587ce2715add305131cc17ee7b0a6071 Mon Sep 17 00:00:00 2001 From: Mari Date: Fri, 19 Jul 2024 15:17:49 +0200 Subject: [PATCH 4/9] update import --- autometrics/src/exemplars/tracing_opentelemetry.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autometrics/src/exemplars/tracing_opentelemetry.rs b/autometrics/src/exemplars/tracing_opentelemetry.rs index 403b00d..22a2110 100644 --- a/autometrics/src/exemplars/tracing_opentelemetry.rs +++ b/autometrics/src/exemplars/tracing_opentelemetry.rs @@ -2,7 +2,7 @@ use super::TraceLabels; use opentelemetry::trace::TraceContextExt as _; use std::iter::FromIterator; use tracing::Span; -use tracing_opentelemetry_0_22::OpenTelemetrySpanExt; +use tracing_opentelemetry_0_24::OpenTelemetrySpanExt; pub fn get_exemplar() -> Option { // Get the OpenTelemetry Context from the tracing span From 173c54efc370a1def734f434edb6bd8beac3ab17 Mon Sep 17 00:00:00 2001 From: Mari Date: Thu, 25 Jul 2024 11:57:16 +0200 Subject: [PATCH 5/9] update more otel stuff --- .github/workflows/ci.yml | 2 +- autometrics/Cargo.toml | 10 +++++----- autometrics/build.rs | 4 ++-- autometrics/src/exemplars/tracing_opentelemetry.rs | 2 +- autometrics/src/lib.rs | 2 +- autometrics/src/otel_push_exporter.rs | 8 ++++---- autometrics/src/prometheus_exporter.rs | 10 +++++++--- autometrics/src/settings.rs | 2 +- autometrics/tests/exemplars_test.rs | 4 ++-- examples/exemplars-tracing-opentelemetry/Cargo.toml | 2 +- 10 files changed, 25 insertions(+), 21 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1c273f6..4d96f3e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,7 +29,7 @@ jobs: - run: cargo test --features=prometheus-exporter,metrics-0_21 - run: cargo test --features=prometheus-exporter,prometheus-0_13 - run: cargo test --features=prometheus-exporter,prometheus-client-0_22,exemplars-tracing - - run: cargo test --features=prometheus-exporter,prometheus-client-0_22,exemplars-tracing-opentelemetry-0_24 + - run: cargo test --features=prometheus-exporter,prometheus-client-0_22,exemplars-tracing-opentelemetry-0_25 - run: cargo test --features=prometheus-exporter,opentelemetry-0_24 # Build the crate using the other optional features diff --git a/autometrics/Cargo.toml b/autometrics/Cargo.toml index f5a3205..98f4a91 100644 --- a/autometrics/Cargo.toml +++ b/autometrics/Cargo.toml @@ -24,7 +24,7 @@ metrics = ["metrics-0_21"] opentelemetry = ["opentelemetry-0_24"] prometheus = ["prometheus-0_13"] prometheus-client = ["prometheus-client-0_22"] -exemplars-tracing-opentelemetry = ["exemplars-tracing-opentelemetry-0_24"] +exemplars-tracing-opentelemetry = ["exemplars-tracing-opentelemetry-0_25"] # Misc prometheus-exporter = [ @@ -72,11 +72,11 @@ otel-push-exporter-async-std = [ # Exemplars exemplars-tracing = ["tracing", "tracing-subscriber"] -exemplars-tracing-opentelemetry-0_24 = [ +exemplars-tracing-opentelemetry-0_25 = [ "dep:opentelemetry", "opentelemetry_sdk/trace", "tracing", - "dep:tracing-opentelemetry-0-24", + "dep:tracing-opentelemetry", ] # Custom objectives @@ -99,7 +99,7 @@ metrics = { version = "0.21", default-features = false, optional = true } # Used for prometheus-exporter feature http = { version = "1.0.0", optional = true } metrics-exporter-prometheus = { version = "0.12", default-features = false, optional = true } -opentelemetry-prometheus = { version = "0.16", optional = true } +opentelemetry-prometheus = { version = "0.17", optional = true } opentelemetry_sdk = { version = "0.24.1", default-features = false, features = [ "metrics", ], optional = true } @@ -116,7 +116,7 @@ tracing-subscriber = { version = "0.3", default-features = false, features = [ ], optional = true } # Used for exemplars-tracing-opentelemetry feature -tracing-opentelemetry-0-24 = { package = "tracing-opentelemetry", version = "0.24", default-features = false, optional = true } +tracing-opentelemetry = { version = "0.25", default-features = false, optional = true } [dev-dependencies] async-trait = "0.1.74" diff --git a/autometrics/build.rs b/autometrics/build.rs index 36ca01e..dfea867 100644 --- a/autometrics/build.rs +++ b/autometrics/build.rs @@ -12,7 +12,7 @@ pub fn main() { #[cfg(feature = "prometheus-client")] println!("cargo:warning=The `prometheus-client` feature is deprecated and will be removed in the next version. Please use `prometheus-client-0_22` instead."); #[cfg(feature = "exemplars-tracing-opentelemetry")] - println!("cargo:warning=The `exemplars-tracing-opentelemetry` feature is deprecated and will be removed in the next version. Please use `exemplars-tracing-opentelemetry-0_24` instead."); + println!("cargo:warning=The `exemplars-tracing-opentelemetry` feature is deprecated and will be removed in the next version. Please use `exemplars-tracing-opentelemetry-0_25` instead."); cfg_aliases! { // Backends @@ -32,7 +32,7 @@ pub fn main() { // Exemplars exemplars: { any(exemplars_tracing, exemplars_tracing_opentelemetry) }, exemplars_tracing: { feature = "exemplars-tracing" }, - exemplars_tracing_opentelemetry: { any(feature = "exemplars-tracing-opentelemetry-0_24", feature = "exemplars-tracing-opentelemetry") }, + exemplars_tracing_opentelemetry: { any(feature = "exemplars-tracing-opentelemetry-0_25", feature = "exemplars-tracing-opentelemetry") }, // Custom objectives custom_objective_percentile: { feature = "custom-objective-percentile" }, diff --git a/autometrics/src/exemplars/tracing_opentelemetry.rs b/autometrics/src/exemplars/tracing_opentelemetry.rs index 22a2110..4748bc4 100644 --- a/autometrics/src/exemplars/tracing_opentelemetry.rs +++ b/autometrics/src/exemplars/tracing_opentelemetry.rs @@ -2,7 +2,7 @@ use super::TraceLabels; use opentelemetry::trace::TraceContextExt as _; use std::iter::FromIterator; use tracing::Span; -use tracing_opentelemetry_0_24::OpenTelemetrySpanExt; +use tracing_opentelemetry::OpenTelemetrySpanExt; pub fn get_exemplar() -> Option { // Get the OpenTelemetry Context from the tracing span diff --git a/autometrics/src/lib.rs b/autometrics/src/lib.rs index 6806238..bf6bf0d 100644 --- a/autometrics/src/lib.rs +++ b/autometrics/src/lib.rs @@ -9,7 +9,7 @@ mod constants; #[cfg(any( feature = "exemplars-tracing", feature = "exemplars-tracing-opentelemetry", - feature = "exemplars-tracing-opentelemetry-0_24", + feature = "exemplars-tracing-opentelemetry-0_25", ))] pub mod exemplars; mod labels; diff --git a/autometrics/src/otel_push_exporter.rs b/autometrics/src/otel_push_exporter.rs index 4bf5c74..b181964 100644 --- a/autometrics/src/otel_push_exporter.rs +++ b/autometrics/src/otel_push_exporter.rs @@ -1,17 +1,17 @@ use opentelemetry::metrics::MetricsError; use opentelemetry_otlp::{ExportConfig, Protocol, WithExportConfig}; use opentelemetry_otlp::{OtlpMetricPipeline, OTEL_EXPORTER_OTLP_TIMEOUT_DEFAULT}; -use opentelemetry_sdk::metrics::MeterProvider; +use opentelemetry_sdk::metrics::SdkMeterProvider; use std::ops::Deref; use std::time::Duration; -/// Newtype struct holding a [`MeterProvider`] with a custom `Drop` implementation to automatically clean up itself +/// Newtype struct holding a [`SdkMeterProvider`] with a custom `Drop` implementation to automatically clean up itself #[repr(transparent)] #[must_use = "Assign this to a unused variable instead: `let _meter = ...` (NOT `let _ = ...`), as else it will be dropped immediately - which will cause it to be shut down"] -pub struct OtelMeterProvider(MeterProvider); +pub struct OtelMeterProvider(SdkMeterProvider); impl Deref for OtelMeterProvider { - type Target = MeterProvider; + type Target = SdkMeterProvider; fn deref(&self) -> &Self::Target { &self.0 diff --git a/autometrics/src/prometheus_exporter.rs b/autometrics/src/prometheus_exporter.rs index 17b0159..3e29243 100644 --- a/autometrics/src/prometheus_exporter.rs +++ b/autometrics/src/prometheus_exporter.rs @@ -29,6 +29,8 @@ use metrics_exporter_prometheus::{BuildError, PrometheusBuilder, PrometheusHandl use once_cell::sync::OnceCell; #[cfg(opentelemetry)] use opentelemetry::metrics::MetricsError; +#[cfg(opentelemetry)] +use opentelemetry_sdk::metrics::SdkMeterProvider; #[cfg(any(opentelemetry, prometheus))] use prometheus::TextEncoder; use thiserror::Error; @@ -213,7 +215,7 @@ fn initialize_prometheus_exporter() -> Result Result Aggregation::Sum, - InstrumentKind::ObservableGauge => Aggregation::LastValue, + InstrumentKind::ObservableGauge | InstrumentKind::Gauge => { + Aggregation::LastValue + } InstrumentKind::Histogram => Aggregation::ExplicitBucketHistogram { boundaries: self.histogram_buckets.clone(), record_min_max: false, @@ -246,7 +250,7 @@ fn initialize_prometheus_exporter() -> Result::default()), + .unwrap_or_else(::default), ); let repo_url = self diff --git a/autometrics/tests/exemplars_test.rs b/autometrics/tests/exemplars_test.rs index e1e49fc..b28119d 100644 --- a/autometrics/tests/exemplars_test.rs +++ b/autometrics/tests/exemplars_test.rs @@ -70,8 +70,8 @@ fn tracing_opentelemetry_context() { let tracer = provider.tracer("test"); // This adds the OpenTelemetry Context to every tracing Span - #[cfg(feature = "exemplars-tracing-opentelemetry-0_24")] - let otel_layer = tracing_opentelemetry_0_22::layer().with_tracer(tracer); + #[cfg(feature = "exemplars-tracing-opentelemetry-0_25")] + let otel_layer = tracing_opentelemetry::layer().with_tracer(tracer); let subscriber = Registry::default().with(otel_layer); diff --git a/examples/exemplars-tracing-opentelemetry/Cargo.toml b/examples/exemplars-tracing-opentelemetry/Cargo.toml index 91d5499..93fae54 100644 --- a/examples/exemplars-tracing-opentelemetry/Cargo.toml +++ b/examples/exemplars-tracing-opentelemetry/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" autometrics = { path = "../../autometrics", features = [ "prometheus-client-0_22", "prometheus-exporter", - "exemplars-tracing-opentelemetry-0_24", + "exemplars-tracing-opentelemetry-0_25", ] } autometrics-example-util = { path = "../util" } axum = { version = "0.7.2", features = ["json"] } From 4ac0416fdc70ff4d2494d6d28cb6670807f514b4 Mon Sep 17 00:00:00 2001 From: Mari Date: Thu, 25 Jul 2024 12:11:01 +0200 Subject: [PATCH 6/9] use the correct version in readme --- autometrics/src/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autometrics/src/README.md b/autometrics/src/README.md index c247d95..582ffc2 100644 --- a/autometrics/src/README.md +++ b/autometrics/src/README.md @@ -163,7 +163,7 @@ If you require more customization than these offered feature flags, enable just See the [exemplars module docs](https://docs.rs/autometrics/latest/autometrics/exemplars/index.html) for details about these features. Currently only supported with the `prometheus-client` backend. - `exemplars-tracing` - extract arbitrary fields from `tracing::Span`s -- `exemplars-tracing-opentelemetry-0_24` - extract the `trace_id` and `span_id` from the `opentelemetry::Context`, which is attached to `tracing::Span`s by the `tracing-opentelemetry` crate +- `exemplars-tracing-opentelemetry-0_25` - extract the `trace_id` and `span_id` from the `opentelemetry::Context`, which is attached to `tracing::Span`s by the `tracing-opentelemetry` crate ### Custom objective values From f9c3785ffd46eeea363d2fd0c0e85093256dfcff Mon Sep 17 00:00:00 2001 From: Mari Date: Thu, 25 Jul 2024 14:55:47 +0200 Subject: [PATCH 7/9] pr review --- CHANGELOG.md | 9 ++++++++- examples/opentelemetry-push-custom/Cargo.toml | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cf4c278..a86509c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased -- `opentelemetry` has been updated to v0.24 (#179) +### Breaking changes + +- `opentelemetry` has been updated to v0.24 (#179) + New feature flags: `opentelemetry-0_24`, `exemplars-tracing-opentelemetry-0_25` + Removed feature flags: `opentelemetry-0_21`, `exemplars-tracing-opentelemetry-0_22` + +**If you are using these metrics library separately in your application in addition +to Autometrics, ensure that you match the version that Autometrics uses.** ## [1.0.1](https://github.com/autometrics-dev/autometrics-rs/releases/tag/v1.0.1) - 2024-02-12 diff --git a/examples/opentelemetry-push-custom/Cargo.toml b/examples/opentelemetry-push-custom/Cargo.toml index 1e43e23..22f6c06 100644 --- a/examples/opentelemetry-push-custom/Cargo.toml +++ b/examples/opentelemetry-push-custom/Cargo.toml @@ -10,7 +10,7 @@ autometrics-example-util = { path = "../util" } # Note that the version of the opentelemetry crate MUST match # the version used by autometrics opentelemetry = { version = "0.24", features = ["metrics"] } -opentelemetry_sdk = { version = "0.24.1", features = ["metrics", "rt-tokio"] } +opentelemetry_sdk = { version = "0.24", features = ["metrics", "rt-tokio"] } opentelemetry-otlp = { version = "0.17", features = ["tonic", "metrics"] } opentelemetry-semantic-conventions = { version = "0.13" } tokio = { version = "1", features = ["full"] } From 477d793383105be57207ea13c9b6ff6e9243fdb2 Mon Sep 17 00:00:00 2001 From: Mari Date: Thu, 25 Jul 2024 15:10:33 +0200 Subject: [PATCH 8/9] update example also to new otel version --- examples/exemplars-tracing-opentelemetry/Cargo.toml | 7 ++++--- examples/exemplars-tracing-opentelemetry/src/main.rs | 4 ++-- examples/opentelemetry-push-custom/Cargo.toml | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/examples/exemplars-tracing-opentelemetry/Cargo.toml b/examples/exemplars-tracing-opentelemetry/Cargo.toml index 93fae54..136f645 100644 --- a/examples/exemplars-tracing-opentelemetry/Cargo.toml +++ b/examples/exemplars-tracing-opentelemetry/Cargo.toml @@ -12,10 +12,11 @@ autometrics = { path = "../../autometrics", features = [ ] } autometrics-example-util = { path = "../util" } axum = { version = "0.7.2", features = ["json"] } -opentelemetry = "0.20" -opentelemetry-stdout = { version = "0.1", features = ["trace"] } +opentelemetry = "0.24" +opentelemetry_sdk = "0.24" +opentelemetry-stdout = { version = "0.5", features = ["trace"] } reqwest = { version = "0.11", features = ["json"] } tokio = { version = "1", features = ["full"] } tracing = "0.1" -tracing-opentelemetry = "0.21" +tracing-opentelemetry = "0.25" tracing-subscriber = { version = "0.3", features = ["env-filter"] } diff --git a/examples/exemplars-tracing-opentelemetry/src/main.rs b/examples/exemplars-tracing-opentelemetry/src/main.rs index 367d6ce..9ed7b9a 100644 --- a/examples/exemplars-tracing-opentelemetry/src/main.rs +++ b/examples/exemplars-tracing-opentelemetry/src/main.rs @@ -1,7 +1,7 @@ use autometrics::{autometrics, prometheus_exporter}; use autometrics_example_util::run_prometheus; -use axum::{routing::get, Router, ServiceExt}; -use opentelemetry::sdk::trace::TracerProvider; +use axum::{routing::get, Router}; +use opentelemetry_sdk::trace::TracerProvider; use opentelemetry::trace::TracerProvider as _; use opentelemetry_stdout::SpanExporter; use std::error::Error; diff --git a/examples/opentelemetry-push-custom/Cargo.toml b/examples/opentelemetry-push-custom/Cargo.toml index 22f6c06..08e20d4 100644 --- a/examples/opentelemetry-push-custom/Cargo.toml +++ b/examples/opentelemetry-push-custom/Cargo.toml @@ -12,5 +12,5 @@ autometrics-example-util = { path = "../util" } opentelemetry = { version = "0.24", features = ["metrics"] } opentelemetry_sdk = { version = "0.24", features = ["metrics", "rt-tokio"] } opentelemetry-otlp = { version = "0.17", features = ["tonic", "metrics"] } -opentelemetry-semantic-conventions = { version = "0.13" } +opentelemetry-semantic-conventions = { version = "0.16.0" } tokio = { version = "1", features = ["full"] } From b86ed9361cdd9bb042a7b938e9dfcf08f71ed215 Mon Sep 17 00:00:00 2001 From: Mari Date: Thu, 25 Jul 2024 15:11:19 +0200 Subject: [PATCH 9/9] cargo fmt --- examples/exemplars-tracing-opentelemetry/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/exemplars-tracing-opentelemetry/src/main.rs b/examples/exemplars-tracing-opentelemetry/src/main.rs index 9ed7b9a..24981bd 100644 --- a/examples/exemplars-tracing-opentelemetry/src/main.rs +++ b/examples/exemplars-tracing-opentelemetry/src/main.rs @@ -1,8 +1,8 @@ use autometrics::{autometrics, prometheus_exporter}; use autometrics_example_util::run_prometheus; use axum::{routing::get, Router}; -use opentelemetry_sdk::trace::TracerProvider; use opentelemetry::trace::TracerProvider as _; +use opentelemetry_sdk::trace::TracerProvider; use opentelemetry_stdout::SpanExporter; use std::error::Error; use std::net::Ipv4Addr;