From 71f9bf2479422f872aad9f6210382c5d472f9e13 Mon Sep 17 00:00:00 2001 From: Artsiom Kaltovich Date: Fri, 23 May 2025 20:57:48 +0300 Subject: [PATCH 1/5] Improve Doc to Make the Tracing Context Example ready to use out of the box #575 --- metrics-tracing-context/src/lib.rs | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/metrics-tracing-context/src/lib.rs b/metrics-tracing-context/src/lib.rs index b68d4c1b..78737ee9 100644 --- a/metrics-tracing-context/src/lib.rs +++ b/metrics-tracing-context/src/lib.rs @@ -9,20 +9,26 @@ //! First, set up `tracing` and `metrics` crates: //! //! ```rust -//! # use metrics_util::debugging::DebuggingRecorder; -//! # use tracing_subscriber::Registry; -//! use metrics_tracing_context::{MetricsLayer, TracingContextLayer}; +//! use metrics_exporter_prometheus::PrometheusBuilder; +//! use metrics_tracing_context::MetricsLayer; +//! use metrics_tracing_context::TracingContextLayer; //! use metrics_util::layers::Layer; //! use tracing_subscriber::layer::SubscriberExt; +//! use tracing_subscriber::{self, Registry}; //! //! // Prepare tracing. -//! # let my_subscriber = Registry::default(); -//! let subscriber = my_subscriber.with(MetricsLayer::new()); +//! let (recorder, metric_server) = PrometheusBuilder::new() +//! .with_http_listener(([0, 0, 0, 0], 1111)) +//! .build() +//! .unwrap(); +//! let server_handle = tokio::spawn(metric_server); +//! let subscriber = Registry::default() +//! .with(tracing_subscriber::fmt::layer()) +//! .with(MetricsLayer::new()); //! tracing::subscriber::set_global_default(subscriber).unwrap(); -//! -//! // Prepare metrics. -//! # let my_recorder = DebuggingRecorder::new(); -//! let recorder = TracingContextLayer::all().layer(my_recorder); +//! +//! // Prepare recorder. +//! let recorder = TracingContextLayer::all().layer(recorder); //! metrics::set_global_recorder(recorder).unwrap(); //! ``` //! From 29eb54eac2a4751f1fb3f6a12c4a24eca6edc993 Mon Sep 17 00:00:00 2001 From: Artsiom Kaltovich Date: Fri, 23 May 2025 22:59:35 +0300 Subject: [PATCH 2/5] fmt --- metrics-tracing-context/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metrics-tracing-context/src/lib.rs b/metrics-tracing-context/src/lib.rs index 78737ee9..907db69f 100644 --- a/metrics-tracing-context/src/lib.rs +++ b/metrics-tracing-context/src/lib.rs @@ -26,7 +26,7 @@ //! .with(tracing_subscriber::fmt::layer()) //! .with(MetricsLayer::new()); //! tracing::subscriber::set_global_default(subscriber).unwrap(); -//! +//! //! // Prepare recorder. //! let recorder = TracingContextLayer::all().layer(recorder); //! metrics::set_global_recorder(recorder).unwrap(); From d2ff9db26ad981fcb093f88a188841810042170e Mon Sep 17 00:00:00 2001 From: Artsiom Kaltovich Date: Thu, 29 May 2025 09:46:03 +0300 Subject: [PATCH 3/5] unite the same lib imports --- metrics-tracing-context/src/lib.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/metrics-tracing-context/src/lib.rs b/metrics-tracing-context/src/lib.rs index 907db69f..0365989b 100644 --- a/metrics-tracing-context/src/lib.rs +++ b/metrics-tracing-context/src/lib.rs @@ -10,8 +10,7 @@ //! //! ```rust //! use metrics_exporter_prometheus::PrometheusBuilder; -//! use metrics_tracing_context::MetricsLayer; -//! use metrics_tracing_context::TracingContextLayer; +//! use metrics_tracing_context::{MetricsLayer, TracingContextLayer}; //! use metrics_util::layers::Layer; //! use tracing_subscriber::layer::SubscriberExt; //! use tracing_subscriber::{self, Registry}; From a99ee52e203f6560eb2e5c65e7c123a262911d0e Mon Sep 17 00:00:00 2001 From: Artsiom Kaltovich Date: Thu, 29 May 2025 10:19:31 +0300 Subject: [PATCH 4/5] add dependencies --- Cargo.lock | 73 +++++++++++++++++++++++++----- metrics-tracing-context/Cargo.toml | 4 +- 2 files changed, 64 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5283ef1e..ed864f5c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1091,6 +1091,16 @@ dependencies = [ "trybuild", ] +[[package]] +name = "metrics" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25dea7ac8057892855ec285c440160265225438c3c45072613c25a4b26e98ef5" +dependencies = [ + "ahash", + "portable-atomic", +] + [[package]] name = "metrics-benchmark" version = "0.1.1-alpha.5" @@ -1098,8 +1108,8 @@ dependencies = [ "getopts", "hdrhistogram", "log", - "metrics", - "metrics-util", + "metrics 0.24.2", + "metrics-util 0.19.1", "portable-atomic", "pretty_env_logger", "quanta", @@ -1111,8 +1121,8 @@ version = "0.9.4" dependencies = [ "bytes", "itoa", - "metrics", - "metrics-util", + "metrics 0.24.2", + "metrics-util 0.19.1", "proptest", "rand 0.9.0", "rand_xoshiro", @@ -1133,8 +1143,8 @@ dependencies = [ "hyper-util", "indexmap", "ipnet", - "metrics", - "metrics-util", + "metrics 0.24.2", + "metrics-util 0.19.1", "proptest", "quanta", "rand 0.9.0", @@ -1144,13 +1154,34 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "metrics-exporter-prometheus" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df88858cd28baaaf2cfc894e37789ed4184be0e1351157aec7bf3c2266c793fd" +dependencies = [ + "base64", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "indexmap", + "ipnet", + "metrics 0.24.2 (registry+https://github.com/rust-lang/crates.io-index)", + "metrics-util 0.19.1 (registry+https://github.com/rust-lang/crates.io-index)", + "quanta", + "thiserror", + "tokio", + "tracing", +] + [[package]] name = "metrics-exporter-tcp" version = "0.11.1" dependencies = [ "bytes", "crossbeam-channel", - "metrics", + "metrics 0.24.2", "mio", "prost", "prost-build", @@ -1168,8 +1199,8 @@ dependencies = [ "bytes", "chrono", "crossbeam-channel", - "metrics", - "metrics-util", + "metrics 0.24.2", + "metrics-util 0.19.1", "prost", "prost-build", "prost-types", @@ -1185,10 +1216,12 @@ dependencies = [ "itertools 0.13.0", "itoa", "lockfree-object-pool", - "metrics", - "metrics-util", + "metrics 0.24.2", + "metrics-exporter-prometheus 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", + "metrics-util 0.19.1", "once_cell", "parking_lot", + "tokio", "tracing", "tracing-core", "tracing-subscriber", @@ -1209,7 +1242,7 @@ dependencies = [ "hashbrown", "hdrhistogram", "indexmap", - "metrics", + "metrics 0.24.2", "mockall", "ndarray", "ndarray-stats", @@ -1229,6 +1262,22 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "metrics-util" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8496cc523d1f94c1385dd8f0f0c2c480b2b8aeccb5b7e4485ad6365523ae376" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", + "hashbrown", + "metrics 0.24.2 (registry+https://github.com/rust-lang/crates.io-index)", + "quanta", + "rand 0.9.0", + "rand_xoshiro", + "sketches-ddsketch", +] + [[package]] name = "minimal-lexical" version = "0.2.1" diff --git a/metrics-tracing-context/Cargo.toml b/metrics-tracing-context/Cargo.toml index 4b398963..0135385c 100644 --- a/metrics-tracing-context/Cargo.toml +++ b/metrics-tracing-context/Cargo.toml @@ -42,4 +42,6 @@ criterion = { workspace = true } itertools = { workspace = true, features = ["use_std"] } parking_lot = { workspace = true } tracing = { workspace = true, features = ["std"] } -tracing-subscriber = { workspace = true, features = ["registry"] } +tracing-subscriber = { workspace = true, features = ["registry", "fmt"] } +tokio = { workspace = true } +metrics-exporter-prometheus = { version = "0.17.0", features = ["http-listener", "hyper", "hyper-util"] } From 414ddf369adac81f45528d822eecd9b93007741d Mon Sep 17 00:00:00 2001 From: Artsiom Kaltovich Date: Sun, 1 Jun 2025 16:53:53 +0300 Subject: [PATCH 5/5] make local tests pass --- Cargo.lock | 120 ++++++++++++++--------------- metrics-tracing-context/Cargo.toml | 3 +- metrics-tracing-context/src/lib.rs | 2 + 3 files changed, 64 insertions(+), 61 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ed864f5c..43cdb719 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -80,6 +80,28 @@ dependencies = [ "num-traits", ] +[[package]] +name = "async-stream" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "atomic-waker" version = "1.1.2" @@ -1091,16 +1113,6 @@ dependencies = [ "trybuild", ] -[[package]] -name = "metrics" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dea7ac8057892855ec285c440160265225438c3c45072613c25a4b26e98ef5" -dependencies = [ - "ahash", - "portable-atomic", -] - [[package]] name = "metrics-benchmark" version = "0.1.1-alpha.5" @@ -1108,8 +1120,8 @@ dependencies = [ "getopts", "hdrhistogram", "log", - "metrics 0.24.2", - "metrics-util 0.19.1", + "metrics", + "metrics-util", "portable-atomic", "pretty_env_logger", "quanta", @@ -1121,8 +1133,8 @@ version = "0.9.4" dependencies = [ "bytes", "itoa", - "metrics 0.24.2", - "metrics-util 0.19.1", + "metrics", + "metrics-util", "proptest", "rand 0.9.0", "rand_xoshiro", @@ -1143,8 +1155,8 @@ dependencies = [ "hyper-util", "indexmap", "ipnet", - "metrics 0.24.2", - "metrics-util 0.19.1", + "metrics", + "metrics-util", "proptest", "quanta", "rand 0.9.0", @@ -1154,34 +1166,13 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "metrics-exporter-prometheus" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df88858cd28baaaf2cfc894e37789ed4184be0e1351157aec7bf3c2266c793fd" -dependencies = [ - "base64", - "http-body-util", - "hyper", - "hyper-rustls", - "hyper-util", - "indexmap", - "ipnet", - "metrics 0.24.2 (registry+https://github.com/rust-lang/crates.io-index)", - "metrics-util 0.19.1 (registry+https://github.com/rust-lang/crates.io-index)", - "quanta", - "thiserror", - "tokio", - "tracing", -] - [[package]] name = "metrics-exporter-tcp" version = "0.11.1" dependencies = [ "bytes", "crossbeam-channel", - "metrics 0.24.2", + "metrics", "mio", "prost", "prost-build", @@ -1199,8 +1190,8 @@ dependencies = [ "bytes", "chrono", "crossbeam-channel", - "metrics 0.24.2", - "metrics-util 0.19.1", + "metrics", + "metrics-util", "prost", "prost-build", "prost-types", @@ -1216,12 +1207,13 @@ dependencies = [ "itertools 0.13.0", "itoa", "lockfree-object-pool", - "metrics 0.24.2", - "metrics-exporter-prometheus 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", - "metrics-util 0.19.1", + "metrics", + "metrics-exporter-prometheus", + "metrics-util", "once_cell", "parking_lot", "tokio", + "tokio-test", "tracing", "tracing-core", "tracing-subscriber", @@ -1242,7 +1234,7 @@ dependencies = [ "hashbrown", "hdrhistogram", "indexmap", - "metrics 0.24.2", + "metrics", "mockall", "ndarray", "ndarray-stats", @@ -1262,22 +1254,6 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "metrics-util" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8496cc523d1f94c1385dd8f0f0c2c480b2b8aeccb5b7e4485ad6365523ae376" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", - "hashbrown", - "metrics 0.24.2 (registry+https://github.com/rust-lang/crates.io-index)", - "quanta", - "rand 0.9.0", - "rand_xoshiro", - "sketches-ddsketch", -] - [[package]] name = "minimal-lexical" version = "0.2.1" @@ -2376,6 +2352,30 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-stream" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-test" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" +dependencies = [ + "async-stream", + "bytes", + "futures-core", + "tokio", + "tokio-stream", +] + [[package]] name = "tokio-util" version = "0.7.14" diff --git a/metrics-tracing-context/Cargo.toml b/metrics-tracing-context/Cargo.toml index 0135385c..28fc567a 100644 --- a/metrics-tracing-context/Cargo.toml +++ b/metrics-tracing-context/Cargo.toml @@ -44,4 +44,5 @@ parking_lot = { workspace = true } tracing = { workspace = true, features = ["std"] } tracing-subscriber = { workspace = true, features = ["registry", "fmt"] } tokio = { workspace = true } -metrics-exporter-prometheus = { version = "0.17.0", features = ["http-listener", "hyper", "hyper-util"] } +metrics-exporter-prometheus = { version = "0.17.0", path = "../metrics-exporter-prometheus" } +tokio-test = "0.4.4" diff --git a/metrics-tracing-context/src/lib.rs b/metrics-tracing-context/src/lib.rs index 0365989b..7f1b5ca6 100644 --- a/metrics-tracing-context/src/lib.rs +++ b/metrics-tracing-context/src/lib.rs @@ -9,6 +9,7 @@ //! First, set up `tracing` and `metrics` crates: //! //! ```rust +//! # tokio_test::block_on(async { //! use metrics_exporter_prometheus::PrometheusBuilder; //! use metrics_tracing_context::{MetricsLayer, TracingContextLayer}; //! use metrics_util::layers::Layer; @@ -29,6 +30,7 @@ //! // Prepare recorder. //! let recorder = TracingContextLayer::all().layer(recorder); //! metrics::set_global_recorder(recorder).unwrap(); +//! # }); //! ``` //! //! Then emit some metrics within spans and see the labels being injected!