Skip to content

Commit 12b0569

Browse files
authored
update to opentelemetry 0.24 (#179)
* update to opentelemetry 0.24 * replace `Unit` with the literal directly * update feature flag * update import * update more otel stuff * use the correct version in readme * pr review * update example also to new otel version * cargo fmt
1 parent 9bc24e0 commit 12b0569

File tree

16 files changed

+60
-49
lines changed

16 files changed

+60
-49
lines changed

.github/workflows/ci.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,15 @@ jobs:
2222
- run: cargo clippy --features=metrics-0_21,prometheus-exporter
2323
- run: cargo clippy --features=prometheus-0_13
2424
- run: cargo clippy --features=prometheus-client-0_22
25-
- run: cargo clippy --features=opentelemetry-0_21
25+
- run: cargo clippy --features=opentelemetry-0_24
2626

2727
# Run the tests with each of the different metrics libraries
2828
- run: cargo test --features=prometheus-exporter
2929
- run: cargo test --features=prometheus-exporter,metrics-0_21
3030
- run: cargo test --features=prometheus-exporter,prometheus-0_13
3131
- run: cargo test --features=prometheus-exporter,prometheus-client-0_22,exemplars-tracing
32-
- run: cargo test --features=prometheus-exporter,prometheus-client-0_22,exemplars-tracing-opentelemetry-0_22
33-
- run: cargo test --features=prometheus-exporter,opentelemetry-0_21
32+
- run: cargo test --features=prometheus-exporter,prometheus-client-0_22,exemplars-tracing-opentelemetry-0_25
33+
- run: cargo test --features=prometheus-exporter,opentelemetry-0_24
3434

3535
# Build the crate using the other optional features
3636
- run: cargo build --features=metrics-0_21,custom-objective-percentile,custom-objective-latency

CHANGELOG.md

+8-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
## Unreleased
1111

12-
-
12+
### Breaking changes
13+
14+
- `opentelemetry` has been updated to v0.24 (#179)
15+
New feature flags: `opentelemetry-0_24`, `exemplars-tracing-opentelemetry-0_25`
16+
Removed feature flags: `opentelemetry-0_21`, `exemplars-tracing-opentelemetry-0_22`
17+
18+
**If you are using these metrics library separately in your application in addition
19+
to Autometrics, ensure that you match the version that Autometrics uses.**
1320

1421
## [1.0.1](https://github.com/autometrics-dev/autometrics-rs/releases/tag/v1.0.1) - 2024-02-12
1522

autometrics/Cargo.toml

+12-12
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@ readme = "README.md"
1515
[features]
1616
# Metrics backends
1717
metrics-0_21 = ["dep:metrics"]
18-
opentelemetry-0_21 = ["opentelemetry/metrics", "dep:prometheus"]
18+
opentelemetry-0_24 = ["opentelemetry/metrics", "dep:prometheus"]
1919
prometheus-0_13 = ["dep:prometheus"]
2020
prometheus-client-0_22 = ["dep:prometheus-client"]
2121

2222
# Deprecated feature flags
2323
metrics = ["metrics-0_21"]
24-
opentelemetry = ["opentelemetry-0_21"]
24+
opentelemetry = ["opentelemetry-0_24"]
2525
prometheus = ["prometheus-0_13"]
2626
prometheus-client = ["prometheus-client-0_22"]
27-
exemplars-tracing-opentelemetry = ["exemplars-tracing-opentelemetry-0_22"]
27+
exemplars-tracing-opentelemetry = ["exemplars-tracing-opentelemetry-0_25"]
2828

2929
# Misc
3030
prometheus-exporter = [
@@ -72,11 +72,11 @@ otel-push-exporter-async-std = [
7272

7373
# Exemplars
7474
exemplars-tracing = ["tracing", "tracing-subscriber"]
75-
exemplars-tracing-opentelemetry-0_22 = [
75+
exemplars-tracing-opentelemetry-0_25 = [
7676
"dep:opentelemetry",
7777
"opentelemetry_sdk/trace",
7878
"tracing",
79-
"dep:tracing-opentelemetry-0-22",
79+
"dep:tracing-opentelemetry",
8080
]
8181

8282
# Custom objectives
@@ -91,19 +91,19 @@ spez = "0.1.2"
9191
thiserror = "1"
9292

9393
# Used for opentelemetry feature
94-
opentelemetry = { version = "0.21", default-features = false, optional = true }
94+
opentelemetry = { version = "0.24", default-features = false, optional = true }
9595

9696
# Use for metrics feature
9797
metrics = { version = "0.21", default-features = false, optional = true }
9898

9999
# Used for prometheus-exporter feature
100100
http = { version = "1.0.0", optional = true }
101101
metrics-exporter-prometheus = { version = "0.12", default-features = false, optional = true }
102-
opentelemetry-prometheus = { version = "0.14", optional = true }
103-
opentelemetry_sdk = { version = "0.21", default-features = false, features = [
102+
opentelemetry-prometheus = { version = "0.17", optional = true }
103+
opentelemetry_sdk = { version = "0.24.1", default-features = false, features = [
104104
"metrics",
105105
], optional = true }
106-
opentelemetry-otlp = { version = "0.14.0", default-features = false, optional = true }
106+
opentelemetry-otlp = { version = "0.17", default-features = false, optional = true }
107107
prometheus = { version = "0.13", default-features = false, optional = true }
108108

109109
# Used for prometheus-client feature
@@ -116,15 +116,15 @@ tracing-subscriber = { version = "0.3", default-features = false, features = [
116116
], optional = true }
117117

118118
# Used for exemplars-tracing-opentelemetry feature
119-
tracing-opentelemetry-0-22 = { package = "tracing-opentelemetry", version = "0.22", default-features = false, optional = true }
119+
tracing-opentelemetry = { version = "0.25", default-features = false, optional = true }
120120

121121
[dev-dependencies]
122122
async-trait = "0.1.74"
123123
axum = { version = "0.7.2", features = ["tokio"] }
124124
criterion = "0.5"
125125
http = "1.0.0"
126-
opentelemetry = "0.21"
127-
opentelemetry-stdout = { version = "0.2", features = ["trace"] }
126+
opentelemetry = "0.24"
127+
opentelemetry-stdout = { version = "0.5", features = ["trace"] }
128128
prometheus-client = "0.22"
129129
tokio = { version = "1", features = ["full"] }
130130
tracing = "0.1"

autometrics/build.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,18 @@ pub fn main() {
66
#[cfg(feature = "metrics")]
77
println!("cargo:warning=The `metrics` feature is deprecated and will be removed in the next version. Please use `metrics-0_21` instead.");
88
#[cfg(feature = "opentelemetry")]
9-
println!("cargo:warning=The `opentelemetry` feature is deprecated and will be removed in the next version. Please use `opentelemetry-0_21` instead.");
9+
println!("cargo:warning=The `opentelemetry` feature is deprecated and will be removed in the next version. Please use `opentelemetry-0_24` instead.");
1010
#[cfg(feature = "prometheus")]
1111
println!("cargo:warning=The `prometheus` feature is deprecated and will be removed in the next version. Please use `prometheus-0_13` instead.");
1212
#[cfg(feature = "prometheus-client")]
1313
println!("cargo:warning=The `prometheus-client` feature is deprecated and will be removed in the next version. Please use `prometheus-client-0_22` instead.");
1414
#[cfg(feature = "exemplars-tracing-opentelemetry")]
15-
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.");
15+
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.");
1616

1717
cfg_aliases! {
1818
// Backends
1919
metrics: { any(feature = "metrics", feature = "metrics-0_21") },
20-
opentelemetry: { any(feature = "opentelemetry", feature = "opentelemetry-0_21") },
20+
opentelemetry: { any(feature = "opentelemetry", feature = "opentelemetry-0_24") },
2121
prometheus: { any(feature = "prometheus", feature = "prometheus-0_13") },
2222
prometheus_client_feature: { any(feature = "prometheus-client", feature = "prometheus-client-0_22") },
2323
default_backend: { all(
@@ -32,7 +32,7 @@ pub fn main() {
3232
// Exemplars
3333
exemplars: { any(exemplars_tracing, exemplars_tracing_opentelemetry) },
3434
exemplars_tracing: { feature = "exemplars-tracing" },
35-
exemplars_tracing_opentelemetry: { any(feature = "exemplars-tracing-opentelemetry-0_22", feature = "exemplars-tracing-opentelemetry") },
35+
exemplars_tracing_opentelemetry: { any(feature = "exemplars-tracing-opentelemetry-0_25", feature = "exemplars-tracing-opentelemetry") },
3636

3737
// Custom objectives
3838
custom_objective_percentile: { feature = "custom-objective-percentile" },

autometrics/src/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ If you require more customization than these offered feature flags, enable just
153153

154154
> 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.
155155
156-
- `opentelemetry-0_21` - use the [opentelemetry](https://crates.io/crates/opentelemetry) crate for producing metrics.
156+
- `opentelemetry-0_24` - use the [opentelemetry](https://crates.io/crates/opentelemetry) crate for producing metrics.
157157
- `metrics-0_21` - use the [metrics](https://crates.io/crates/metrics) crate for producing metrics
158158
- `prometheus-0_13` - use the [prometheus](https://crates.io/crates/prometheus) crate for producing metrics
159159
- `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
163163
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.
164164

165165
- `exemplars-tracing` - extract arbitrary fields from `tracing::Span`s
166-
- `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
166+
- `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
167167

168168
### Custom objective values
169169

autometrics/src/exemplars/tracing_opentelemetry.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use super::TraceLabels;
22
use opentelemetry::trace::TraceContextExt as _;
33
use std::iter::FromIterator;
44
use tracing::Span;
5-
use tracing_opentelemetry_0_22::OpenTelemetrySpanExt;
5+
use tracing_opentelemetry::OpenTelemetrySpanExt;
66

77
pub fn get_exemplar() -> Option<TraceLabels> {
88
// Get the OpenTelemetry Context from the tracing span

autometrics/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ mod constants;
99
#[cfg(any(
1010
feature = "exemplars-tracing",
1111
feature = "exemplars-tracing-opentelemetry",
12-
feature = "exemplars-tracing-opentelemetry-0_22",
12+
feature = "exemplars-tracing-opentelemetry-0_25",
1313
))]
1414
pub mod exemplars;
1515
mod labels;

autometrics/src/otel_push_exporter.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
use opentelemetry::metrics::MetricsError;
22
use opentelemetry_otlp::{ExportConfig, Protocol, WithExportConfig};
33
use opentelemetry_otlp::{OtlpMetricPipeline, OTEL_EXPORTER_OTLP_TIMEOUT_DEFAULT};
4-
use opentelemetry_sdk::metrics::MeterProvider;
4+
use opentelemetry_sdk::metrics::SdkMeterProvider;
55
use std::ops::Deref;
66
use std::time::Duration;
77

8-
/// Newtype struct holding a [`MeterProvider`] with a custom `Drop` implementation to automatically clean up itself
8+
/// Newtype struct holding a [`SdkMeterProvider`] with a custom `Drop` implementation to automatically clean up itself
99
#[repr(transparent)]
1010
#[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"]
11-
pub struct OtelMeterProvider(MeterProvider);
11+
pub struct OtelMeterProvider(SdkMeterProvider);
1212

1313
impl Deref for OtelMeterProvider {
14-
type Target = MeterProvider;
14+
type Target = SdkMeterProvider;
1515

1616
fn deref(&self) -> &Self::Target {
1717
&self.0

autometrics/src/prometheus_exporter.rs

+7-3
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ use metrics_exporter_prometheus::{BuildError, PrometheusBuilder, PrometheusHandl
2929
use once_cell::sync::OnceCell;
3030
#[cfg(opentelemetry)]
3131
use opentelemetry::metrics::MetricsError;
32+
#[cfg(opentelemetry)]
33+
use opentelemetry_sdk::metrics::SdkMeterProvider;
3234
#[cfg(any(opentelemetry, prometheus))]
3335
use prometheus::TextEncoder;
3436
use thiserror::Error;
@@ -213,7 +215,7 @@ fn initialize_prometheus_exporter() -> Result<GlobalPrometheus, ExporterInitiali
213215
use opentelemetry::global;
214216
use opentelemetry_prometheus::exporter;
215217
use opentelemetry_sdk::metrics::reader::AggregationSelector;
216-
use opentelemetry_sdk::metrics::{Aggregation, InstrumentKind, MeterProvider};
218+
use opentelemetry_sdk::metrics::{Aggregation, InstrumentKind};
217219

218220
/// A custom aggregation selector that uses the configured histogram buckets,
219221
/// along with the other default aggregation settings.
@@ -228,7 +230,9 @@ fn initialize_prometheus_exporter() -> Result<GlobalPrometheus, ExporterInitiali
228230
| InstrumentKind::UpDownCounter
229231
| InstrumentKind::ObservableCounter
230232
| InstrumentKind::ObservableUpDownCounter => Aggregation::Sum,
231-
InstrumentKind::ObservableGauge => Aggregation::LastValue,
233+
InstrumentKind::ObservableGauge | InstrumentKind::Gauge => {
234+
Aggregation::LastValue
235+
}
232236
InstrumentKind::Histogram => Aggregation::ExplicitBucketHistogram {
233237
boundaries: self.histogram_buckets.clone(),
234238
record_min_max: false,
@@ -246,7 +250,7 @@ fn initialize_prometheus_exporter() -> Result<GlobalPrometheus, ExporterInitiali
246250
.without_target_info()
247251
.build()?;
248252

249-
let meter_provider = MeterProvider::builder().with_reader(exporter).build();
253+
let meter_provider = SdkMeterProvider::builder().with_reader(exporter).build();
250254

251255
global::set_meter_provider(meter_provider);
252256
}

autometrics/src/settings.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ impl AutometricsSettingsBuilder {
195195
let (prometheus_client_registry, prometheus_client_metrics) =
196196
crate::tracker::prometheus_client::initialize_registry(
197197
self.prometheus_client_registry
198-
.unwrap_or_else(|| <prometheus_client::registry::Registry>::default()),
198+
.unwrap_or_else(<prometheus_client::registry::Registry>::default),
199199
);
200200

201201
let repo_url = self

autometrics/src/tracker/opentelemetry.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::__private::FunctionDescription;
33
use crate::labels::{BuildInfoLabels, CounterLabels, GaugeLabels, HistogramLabels, Label};
44
use crate::{constants::*, tracker::TrackMetrics};
55
use once_cell::sync::Lazy;
6-
use opentelemetry::metrics::{Counter, Histogram, Unit, UpDownCounter};
6+
use opentelemetry::metrics::{Counter, Histogram, UpDownCounter};
77
use opentelemetry::{global, KeyValue};
88
use std::{sync::Once, time::Instant};
99

@@ -19,10 +19,9 @@ static HISTOGRAM: Lazy<Histogram<f64>> = Lazy::new(|| {
1919
// Note that the unit needs to be written as "s" rather than "seconds"
2020
// or it will not be included in the metric name
2121
// https://github.com/open-telemetry/opentelemetry-rust/issues/1173
22-
let unit = Unit::new("s");
2322
global::meter(METER_NAME)
2423
.f64_histogram(HISTOGRAM_NAME)
25-
.with_unit(unit)
24+
.with_unit("s")
2625
.with_description(HISTOGRAM_DESCRIPTION)
2726
.init()
2827
});

autometrics/tests/exemplars_test.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ fn tracing_opentelemetry_context() {
7070
let tracer = provider.tracer("test");
7171

7272
// This adds the OpenTelemetry Context to every tracing Span
73-
#[cfg(feature = "exemplars-tracing-opentelemetry-0_22")]
74-
let otel_layer = tracing_opentelemetry_0_22::layer().with_tracer(tracer);
73+
#[cfg(feature = "exemplars-tracing-opentelemetry-0_25")]
74+
let otel_layer = tracing_opentelemetry::layer().with_tracer(tracer);
7575

7676
let subscriber = Registry::default().with(otel_layer);
7777

examples/exemplars-tracing-opentelemetry/Cargo.toml

+5-4
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@ edition = "2021"
88
autometrics = { path = "../../autometrics", features = [
99
"prometheus-client-0_22",
1010
"prometheus-exporter",
11-
"exemplars-tracing-opentelemetry-0_22",
11+
"exemplars-tracing-opentelemetry-0_25",
1212
] }
1313
autometrics-example-util = { path = "../util" }
1414
axum = { version = "0.7.2", features = ["json"] }
15-
opentelemetry = "0.20"
16-
opentelemetry-stdout = { version = "0.1", features = ["trace"] }
15+
opentelemetry = "0.24"
16+
opentelemetry_sdk = "0.24"
17+
opentelemetry-stdout = { version = "0.5", features = ["trace"] }
1718
reqwest = { version = "0.11", features = ["json"] }
1819
tokio = { version = "1", features = ["full"] }
1920
tracing = "0.1"
20-
tracing-opentelemetry = "0.21"
21+
tracing-opentelemetry = "0.25"
2122
tracing-subscriber = { version = "0.3", features = ["env-filter"] }

examples/exemplars-tracing-opentelemetry/src/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use autometrics::{autometrics, prometheus_exporter};
22
use autometrics_example_util::run_prometheus;
3-
use axum::{routing::get, Router, ServiceExt};
4-
use opentelemetry::sdk::trace::TracerProvider;
3+
use axum::{routing::get, Router};
54
use opentelemetry::trace::TracerProvider as _;
5+
use opentelemetry_sdk::trace::TracerProvider;
66
use opentelemetry_stdout::SpanExporter;
77
use std::error::Error;
88
use std::net::Ipv4Addr;

examples/opentelemetry-push-custom/Cargo.toml

+5-5
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ publish = false
55
edition = "2021"
66

77
[dependencies]
8-
autometrics = { path = "../../autometrics", features = ["opentelemetry-0_21"] }
8+
autometrics = { path = "../../autometrics", features = ["opentelemetry-0_24"] }
99
autometrics-example-util = { path = "../util" }
1010
# Note that the version of the opentelemetry crate MUST match
1111
# the version used by autometrics
12-
opentelemetry = { version = "0.21", features = ["metrics"] }
13-
opentelemetry_sdk = { version = "0.21.1", features = ["metrics", "rt-tokio"] }
14-
opentelemetry-otlp = { version = "0.14", features = ["tonic", "metrics"] }
15-
opentelemetry-semantic-conventions = { version = "0.13" }
12+
opentelemetry = { version = "0.24", features = ["metrics"] }
13+
opentelemetry_sdk = { version = "0.24", features = ["metrics", "rt-tokio"] }
14+
opentelemetry-otlp = { version = "0.17", features = ["tonic", "metrics"] }
15+
opentelemetry-semantic-conventions = { version = "0.16.0" }
1616
tokio = { version = "1", features = ["full"] }

examples/opentelemetry-push/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ publish = false
55
edition = "2021"
66

77
[dependencies]
8-
autometrics = { path = "../../autometrics", features = ["opentelemetry-0_21", "otel-push-exporter-http", "otel-push-exporter-tokio"] }
8+
autometrics = { path = "../../autometrics", features = ["opentelemetry-0_24", "otel-push-exporter-http", "otel-push-exporter-tokio"] }
99
autometrics-example-util = { path = "../util" }
1010
tokio = { version = "1", features = ["full"] }

0 commit comments

Comments
 (0)