From 02efe8e941f17522b272f937878277cae409e5ea Mon Sep 17 00:00:00 2001 From: Braden Steffaniak Date: Tue, 11 Feb 2025 07:30:00 -0500 Subject: [PATCH 1/2] Upgrade opentelemetry-prometheus to 0.28 --- opentelemetry-prometheus/Cargo.toml | 8 +- opentelemetry-prometheus/src/lib.rs | 7 +- .../tests/integration_test.rs | 88 +++++++------------ 3 files changed, 41 insertions(+), 62 deletions(-) diff --git a/opentelemetry-prometheus/Cargo.toml b/opentelemetry-prometheus/Cargo.toml index 4ace0c2a84..938fe3535d 100644 --- a/opentelemetry-prometheus/Cargo.toml +++ b/opentelemetry-prometheus/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "opentelemetry-prometheus" -version = "0.27.0" +version = "0.28.0" description = "Prometheus exporter for OpenTelemetry" homepage = "https://github.com/open-telemetry/opentelemetry-rust" repository = "https://github.com/open-telemetry/opentelemetry-rust" @@ -21,14 +21,14 @@ rustdoc-args = ["--cfg", "docsrs"] [dependencies] once_cell = { version = "1.13" } -opentelemetry = { version = "0.27", default-features = false, features = ["metrics"] } -opentelemetry_sdk = { version = "0.27", default-features = false, features = ["metrics"] } +opentelemetry = { version = "0.28", default-features = false, features = ["metrics"] } +opentelemetry_sdk = { version = "0.28", default-features = false, features = ["metrics"] } prometheus = "0.13" protobuf = "2.14" tracing = {version = ">=0.1.40", default-features = false, optional = true} # optional for opentelemetry internal logging [dev-dependencies] -opentelemetry-semantic-conventions = { version = "0.27" } +opentelemetry-semantic-conventions = { version = "0.28" } http-body-util = { version = "0.1" } hyper = { version = "1.3", features = ["full"] } hyper-util = { version = "0.1", features = ["full"] } diff --git a/opentelemetry-prometheus/src/lib.rs b/opentelemetry-prometheus/src/lib.rs index 968635a715..e68243fe2c 100644 --- a/opentelemetry-prometheus/src/lib.rs +++ b/opentelemetry-prometheus/src/lib.rs @@ -99,6 +99,7 @@ use once_cell::sync::{Lazy, OnceCell}; use opentelemetry::{otel_error, otel_warn, InstrumentationScope, Key, Value}; use opentelemetry_sdk::{ + error::OTelSdkResult, metrics::{ data::{self, ResourceMetrics}, reader::MetricReader, @@ -157,11 +158,11 @@ impl MetricReader for PrometheusExporter { self.reader.collect(rm) } - fn force_flush(&self) -> MetricResult<()> { + fn force_flush(&self) -> OTelSdkResult { self.reader.force_flush() } - fn shutdown(&self) -> MetricResult<()> { + fn shutdown(&self) -> OTelSdkResult { self.reader.shutdown() } @@ -284,7 +285,7 @@ impl prometheus::core::Collector for Collector { }; let mut metrics = ResourceMetrics { - resource: Resource::empty(), + resource: Resource::builder_empty().build(), scope_metrics: vec![], }; if let Err(err) = self.reader.collect(&mut metrics) { diff --git a/opentelemetry-prometheus/tests/integration_test.rs b/opentelemetry-prometheus/tests/integration_test.rs index 286f8e0392..ccc3b1edc7 100644 --- a/opentelemetry-prometheus/tests/integration_test.rs +++ b/opentelemetry-prometheus/tests/integration_test.rs @@ -1,16 +1,12 @@ use std::collections::HashSet; use std::fs; use std::path::Path; -use std::time::Duration; use opentelemetry::metrics::{Meter, MeterProvider as _}; use opentelemetry::KeyValue; use opentelemetry::{InstrumentationScope, Key}; use opentelemetry_prometheus::{ExporterBuilder, ResourceSelector}; use opentelemetry_sdk::metrics::SdkMeterProvider; -use opentelemetry_sdk::resource::{ - EnvResourceDetector, SdkProvidedResourceDetector, TelemetryResourceDetector, -}; use opentelemetry_sdk::Resource; use opentelemetry_semantic_conventions::resource::{SERVICE_NAME, TELEMETRY_SDK_VERSION}; use prometheus::{Encoder, TextEncoder}; @@ -360,26 +356,20 @@ fn prometheus_exporter_integration() { let exporter = tc.builder.with_registry(registry.clone()).build().unwrap(); let res = if tc.empty_resource { - Resource::empty() + Resource::builder_empty().build() } else { - Resource::from_detectors( - Duration::from_secs(0), - vec![ - Box::new(SdkProvidedResourceDetector), - Box::new(EnvResourceDetector::new()), - Box::new(TelemetryResourceDetector), - ], - ) - .merge(&mut Resource::new( - vec![ - // always specify service.name because the default depends on the running OS - KeyValue::new(SERVICE_NAME, "prometheus_test"), - // Overwrite the semconv.TelemetrySDKVersionKey value so we don't need to update every version - KeyValue::new(TELEMETRY_SDK_VERSION, "latest"), - ] - .into_iter() - .chain(tc.custom_resource_attrs.into_iter()), - )) + Resource::builder() + .with_attributes( + vec![ + // always specify service.name because the default depends on the running OS + KeyValue::new(SERVICE_NAME, "prometheus_test"), + // Overwrite the semconv.TelemetrySDKVersionKey value so we don't need to update every version + KeyValue::new(TELEMETRY_SDK_VERSION, "latest"), + ] + .into_iter() + .chain(tc.custom_resource_attrs.into_iter()), + ) + .build() }; let provider = SdkMeterProvider::builder() @@ -431,20 +421,14 @@ fn multiple_scopes() { .build() .unwrap(); - let resource = Resource::from_detectors( - Duration::from_secs(0), - vec![ - Box::new(SdkProvidedResourceDetector), - Box::new(EnvResourceDetector::new()), - Box::new(TelemetryResourceDetector), - ], - ) - .merge(&mut Resource::new(vec![ - // always specify service.name because the default depends on the running OS - KeyValue::new(SERVICE_NAME, "prometheus_test"), - // Overwrite the semconv.TelemetrySDKVersionKey value so we don't need to update every version - KeyValue::new(TELEMETRY_SDK_VERSION, "latest"), - ])); + let resource = Resource::builder() + .with_attributes([ + // always specify service.name because the default depends on the running OS + KeyValue::new(SERVICE_NAME, "prometheus_test"), + // Overwrite the semconv.TelemetrySDKVersionKey value so we don't need to update every version + KeyValue::new(TELEMETRY_SDK_VERSION, "latest"), + ]) + .build(); let provider = SdkMeterProvider::builder() .with_reader(exporter) @@ -781,24 +765,18 @@ fn duplicate_metrics() { let registry = prometheus::Registry::new(); let exporter = tc.builder.with_registry(registry.clone()).build().unwrap(); - let resource = Resource::from_detectors( - Duration::from_secs(0), - vec![ - Box::new(SdkProvidedResourceDetector), - Box::new(EnvResourceDetector::new()), - Box::new(TelemetryResourceDetector), - ], - ) - .merge(&mut Resource::new( - vec![ - // always specify service.name because the default depends on the running OS - KeyValue::new(SERVICE_NAME, "prometheus_test"), - // Overwrite the semconv.TelemetrySDKVersionKey value so we don't need to update every version - KeyValue::new(TELEMETRY_SDK_VERSION, "latest"), - ] - .into_iter() - .chain(tc.custom_resource_attrs.into_iter()), - )); + let resource = Resource::builder() + .with_attributes( + vec![ + // always specify service.name because the default depends on the running OS + KeyValue::new(SERVICE_NAME, "prometheus_test"), + // Overwrite the semconv.TelemetrySDKVersionKey value so we don't need to update every version + KeyValue::new(TELEMETRY_SDK_VERSION, "latest"), + ] + .into_iter() + .chain(tc.custom_resource_attrs.into_iter()), + ) + .build(); let provider = SdkMeterProvider::builder() .with_resource(resource) From c8b39bd1c4ecb6e9b3dd12b9b80fe7b9734b2246 Mon Sep 17 00:00:00 2001 From: Braden Steffaniak Date: Tue, 11 Feb 2025 07:30:00 -0500 Subject: [PATCH 2/2] Update changelog for 0.28 upgrade --- opentelemetry-prometheus/CHANGELOG.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/opentelemetry-prometheus/CHANGELOG.md b/opentelemetry-prometheus/CHANGELOG.md index b45f2b51dc..676cb24cff 100644 --- a/opentelemetry-prometheus/CHANGELOG.md +++ b/opentelemetry-prometheus/CHANGELOG.md @@ -2,8 +2,12 @@ ## vNext -- Bump msrv to 1.75.0. +## v0.28.0 +- Update `opentelemetry` dependency version to 0.28 +- Update `opentelemetry_sdk` dependency version to 0.28 +- Update `opentelemetry-semantic-conventions` dependency version to 0.28 +- Bump msrv to 1.75.0. ## v0.27.0 @@ -11,7 +15,6 @@ - Update `opentelemetry_sdk` dependency version to 0.27 - Update `opentelemetry-semantic-conventions` dependency version to 0.27 - ## v0.17.0 ### Changed @@ -66,6 +69,7 @@ ## v0.12.0 ### Changed + - [Breaking] Add `_total` suffix for all counters [#952](https://github.com/open-telemetry/opentelemetry-rust/pull/952). - Update to `opentelemetry` v0.19. - Bump MSRV to 1.57 [#953](https://github.com/open-telemetry/opentelemetry-rust/pull/953).