From f572fee658501a78276bd71529b370888f446f0a Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Mon, 15 Apr 2024 14:44:19 -0400 Subject: [PATCH 1/3] feat: upgrade otel --- crates/metrics/Cargo.toml | 4 ++-- crates/metrics/src/lib.rs | 45 +++++++++++++----------------------- crates/metrics/src/macros.rs | 6 ++--- crates/metrics/src/task.rs | 18 ++++----------- 4 files changed, 26 insertions(+), 47 deletions(-) diff --git a/crates/metrics/Cargo.toml b/crates/metrics/Cargo.toml index 6c588d7..d6e8b97 100644 --- a/crates/metrics/Cargo.toml +++ b/crates/metrics/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [dependencies] pin-project = "1" prometheus = "0.13" -opentelemetry = { version = "0.19", features = ["metrics", "rt-tokio"] } -opentelemetry-prometheus = "0.12" +opentelemetry = { version = "0.20.0", features = ["metrics"] } +opentelemetry-prometheus = "0.13" once_cell = "1.17" smallvec = "1.11" diff --git a/crates/metrics/src/lib.rs b/crates/metrics/src/lib.rs index 7034033..43fb7dc 100644 --- a/crates/metrics/src/lib.rs +++ b/crates/metrics/src/lib.rs @@ -1,14 +1,10 @@ pub use {future::*, once_cell::sync::Lazy, opentelemetry as otel, task::*}; use { opentelemetry::{ - metrics::{Meter, MeterProvider}, - sdk::{ - export::metrics::aggregation, - metrics::{processors, selectors}, - }, + metrics::{Meter, MeterProvider as _}, + sdk::metrics::MeterProvider, }, - opentelemetry_prometheus::PrometheusExporter, - prometheus::{Error as PrometheusError, TextEncoder}, + prometheus::{Error as PrometheusError, Registry, TextEncoder}, std::{ sync::{Arc, Mutex}, time::Duration, @@ -26,26 +22,17 @@ static SERVICE_NAME: Mutex> = Mutex::new(None); static METRICS_CORE: Lazy> = Lazy::new(|| { let service_name = SERVICE_NAME.lock().unwrap().unwrap_or(DEFAULT_SERVICE_NAME); - let controller = otel::sdk::metrics::controllers::basic(processors::factory( - selectors::simple::histogram(vec![]), - aggregation::cumulative_temporality_selector(), - )) - .with_resource(otel::sdk::Resource::new(vec![otel::KeyValue::new( - "service_name", - service_name, - )])) - .build(); - - let prometheus_exporter = opentelemetry_prometheus::exporter(controller).init(); - let meter = prometheus_exporter - .meter_provider() - .unwrap() - .meter(service_name); - - Arc::new(ServiceMetrics { - meter, - prometheus_exporter, - }) + let registry = Registry::new(); + let prometheus_exporter = opentelemetry_prometheus::exporter() + .with_registry(registry.clone()) + .build() + .unwrap(); + let provider = MeterProvider::builder() + .with_reader(prometheus_exporter) + .build(); + let meter = provider.meter(service_name); + + Arc::new(ServiceMetrics { registry, meter }) }); /// Global application metrics access. @@ -53,8 +40,8 @@ static METRICS_CORE: Lazy> = Lazy::new(|| { /// The main functionality is to provide global access to opentelemetry's /// [`Meter`]. pub struct ServiceMetrics { + registry: Registry, meter: Meter, - prometheus_exporter: PrometheusExporter, } impl ServiceMetrics { @@ -81,7 +68,7 @@ impl ServiceMetrics { /// Generates export data in Prometheus format, serialized into string. pub fn export() -> Result { - let data = Self::get().prometheus_exporter.registry().gather(); + let data = Self::get().registry.gather(); TextEncoder::new().encode_to_string(&data) } diff --git a/crates/metrics/src/macros.rs b/crates/metrics/src/macros.rs index 8767a94..d9a67d2 100644 --- a/crates/metrics/src/macros.rs +++ b/crates/metrics/src/macros.rs @@ -19,7 +19,7 @@ macro_rules! gauge { }}; ($name:expr, $value:expr, $tags:expr) => {{ - $crate::gauge!($name).observe(&$crate::otel::Context::new(), $value as u64, $tags); + $crate::gauge!($name).observe($value as u64, $tags); }}; } @@ -39,7 +39,7 @@ macro_rules! histogram { }}; ($name:expr, $value:expr, $tags:expr) => {{ - $crate::histogram!($name).record(&$crate::otel::Context::new(), $value as f64, $tags); + $crate::histogram!($name).record($value as f64, $tags); }}; } @@ -59,6 +59,6 @@ macro_rules! counter { }}; ($name:expr, $value:expr, $tags:expr) => {{ - $crate::counter!($name).add(&$crate::otel::Context::new(), $value as u64, $tags); + $crate::counter!($name).add($value as u64, $tags); }}; } diff --git a/crates/metrics/src/task.rs b/crates/metrics/src/task.rs index 4f99ec8..525620c 100644 --- a/crates/metrics/src/task.rs +++ b/crates/metrics/src/task.rs @@ -99,9 +99,7 @@ impl OtelTaskMetricsRecorder { impl TaskMetricsRecorder for OtelTaskMetricsRecorder { fn record_task_started(&self) { - self.inner - .tasks_started - .add(&otel::Context::new(), 1, &self.combine_attributes()); + self.inner.tasks_started.add(1, &self.combine_attributes()); } fn record_task_finished( @@ -117,18 +115,12 @@ impl TaskMetricsRecorder for OtelTaskMetricsRecorder { let mut attrs = self.combine_attributes(); attrs.push(otel::KeyValue::new("completed", completed)); - let ctx = otel::Context::new(); - - self.inner - .total_duration - .record(&ctx, total_duration_ms, &attrs); + self.inner.total_duration.record(total_duration_ms, &attrs); - self.inner - .poll_duration - .record(&ctx, poll_duration_ms, &attrs); + self.inner.poll_duration.record(poll_duration_ms, &attrs); - self.inner.poll_entries.add(&ctx, poll_entries, &attrs); - self.inner.tasks_finished.add(&ctx, 1, &attrs); + self.inner.poll_entries.add(poll_entries, &attrs); + self.inner.tasks_finished.add(1, &attrs); } } From eb63b0ac1091768118fd6ec0190bb6c536a5319c Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Mon, 15 Apr 2024 15:04:27 -0400 Subject: [PATCH 2/3] chore: bump again --- crates/metrics/Cargo.toml | 5 +++-- crates/metrics/src/lib.rs | 6 ++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/crates/metrics/Cargo.toml b/crates/metrics/Cargo.toml index d6e8b97..e5d1165 100644 --- a/crates/metrics/Cargo.toml +++ b/crates/metrics/Cargo.toml @@ -6,7 +6,8 @@ edition = "2021" [dependencies] pin-project = "1" prometheus = "0.13" -opentelemetry = { version = "0.20.0", features = ["metrics"] } -opentelemetry-prometheus = "0.13" +opentelemetry = { version = "0.21.0", features = ["metrics"] } +opentelemetry_sdk = { version = "0.21.2", features = ["metrics", "rt-tokio"] } +opentelemetry-prometheus = "0.14" once_cell = "1.17" smallvec = "1.11" diff --git a/crates/metrics/src/lib.rs b/crates/metrics/src/lib.rs index 43fb7dc..f11aa27 100644 --- a/crates/metrics/src/lib.rs +++ b/crates/metrics/src/lib.rs @@ -1,9 +1,7 @@ pub use {future::*, once_cell::sync::Lazy, opentelemetry as otel, task::*}; use { - opentelemetry::{ - metrics::{Meter, MeterProvider as _}, - sdk::metrics::MeterProvider, - }, + opentelemetry::metrics::{Meter, MeterProvider as _}, + opentelemetry_sdk::metrics::MeterProvider, prometheus::{Error as PrometheusError, Registry, TextEncoder}, std::{ sync::{Arc, Mutex}, From f2f31df3972d43bced7a55d144353869c96633b1 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Mon, 15 Apr 2024 15:08:32 -0400 Subject: [PATCH 3/3] chore: bump again --- crates/metrics/Cargo.toml | 6 +++--- crates/metrics/src/lib.rs | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/metrics/Cargo.toml b/crates/metrics/Cargo.toml index e5d1165..3c4b83a 100644 --- a/crates/metrics/Cargo.toml +++ b/crates/metrics/Cargo.toml @@ -6,8 +6,8 @@ edition = "2021" [dependencies] pin-project = "1" prometheus = "0.13" -opentelemetry = { version = "0.21.0", features = ["metrics"] } -opentelemetry_sdk = { version = "0.21.2", features = ["metrics", "rt-tokio"] } -opentelemetry-prometheus = "0.14" +opentelemetry = { version = "0.22.0", features = ["metrics"] } +opentelemetry_sdk = { version = "0.22.1", features = ["metrics", "rt-tokio"] } +opentelemetry-prometheus = "0.15" once_cell = "1.17" smallvec = "1.11" diff --git a/crates/metrics/src/lib.rs b/crates/metrics/src/lib.rs index f11aa27..e28ee58 100644 --- a/crates/metrics/src/lib.rs +++ b/crates/metrics/src/lib.rs @@ -1,7 +1,7 @@ pub use {future::*, once_cell::sync::Lazy, opentelemetry as otel, task::*}; use { - opentelemetry::metrics::{Meter, MeterProvider as _}, - opentelemetry_sdk::metrics::MeterProvider, + opentelemetry_sdk::metrics::SdkMeterProvider, + otel::metrics::{Meter, MeterProvider}, prometheus::{Error as PrometheusError, Registry, TextEncoder}, std::{ sync::{Arc, Mutex}, @@ -25,7 +25,7 @@ static METRICS_CORE: Lazy> = Lazy::new(|| { .with_registry(registry.clone()) .build() .unwrap(); - let provider = MeterProvider::builder() + let provider = SdkMeterProvider::builder() .with_reader(prometheus_exporter) .build(); let meter = provider.meter(service_name);