| Crates.io | tokio-metrics-collector |
| lib.rs | tokio-metrics-collector |
| version | 0.3.1 |
| created_at | 2023-04-19 15:03:17.279689+00 |
| updated_at | 2025-03-27 13:48:45.870444+00 |
| description | Provides utilities for collecting Prometheus-compatible metrics from Tokio runtime and tasks. |
| homepage | |
| repository | https://github.com/Hanaasagi/tokio-metrics-collector |
| max_upload_size | |
| id | 843633 |
| size | 99,535 |
Provides utilities for collecting Prometheus-compatible metrics from Tokio runtime and tasks.
[dependencies]
tokio-metrics-collector = { version = "0.3.1" }
Documentation:
use prometheus::Encoder;
#[tokio::main]
async fn main() {
// register global runtime collector
prometheus::default_registry()
.register(Box::new(
tokio_metrics_collector::default_runtime_collector(),
))
.unwrap();
// register global task collector
let task_collector = tokio_metrics_collector::default_task_collector();
prometheus::default_registry()
.register(Box::new(task_collector))
.unwrap();
// construct a TaskMonitor
let monitor = tokio_metrics_collector::TaskMonitor::new();
// add this monitor to task collector with label 'simple_task'
// NOTE: duplicate labels in multiple monitors cause incorrect data aggregation.
// It is recommended to use unique labels for each monitor and
// instrument multiple tasks by the `instrument` function.
task_collector.add("simple_task", monitor.clone());
// spawn a background task and instrument
tokio::spawn(monitor.instrument(async {
loop {
// do something
tokio::time::sleep(tokio::time::Duration::from_millis(500)).await;
}
}));
// print metrics every tick
for _ in 0..5 {
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
let encoder = prometheus::TextEncoder::new();
let mut buffer = Vec::new();
encoder
.encode(&prometheus::default_registry().gather(), &mut buffer)
.unwrap();
let data = String::from_utf8(buffer.clone()).unwrap();
println!("{}", data);
}
}
And a http server example, you can find in examples/server.rs.
This unstable functionality requires tokio_unstable, and the rt crate
feature. To enable tokio_unstable, the --cfg tokio_unstable must be passed
to rustc when compiling. You can do this by setting the RUSTFLAGS
environment variable before compiling your application; e.g.:
RUSTFLAGS="--cfg tokio_unstable" cargo build
Or, by creating the file .cargo/config.toml in the root directory of your crate.
If you're using a workspace, put this file in the root directory of your workspace instead.
[build]
rustflags = ["--cfg", "tokio_unstable"]
rustdocflags = ["--cfg", "tokio_unstable"]
workers_count | type: Gaugetotal_park_count | type: Countertotal_noop_count | type: Countertotal_steal_count | type: Countertotal_steal_operations | type: Counternum_remote_schedules | type: Countertotal_local_schedule_count | type: Countertotal_overflow_count | type: Countertotal_polls_count | type: Countertotal_busy_duration | type: Countertotal_global_queue_depth | type: Gaugetotal_local_queue_depth | type: Gaugeelapsed | type: Counterbudget_forced_yield_count | type: Counterio_driver_ready_count | type: Counter
The number of ready events received from the I/O driver.instrumented_count | type: Gaugedropped_count | type: Gauge
The number of tasks dropped in the interval.first_poll_count | type: Gaugetotal_first_poll_delay | type: Counter
The total duration elapsed between the instant tasks are instrumented, and the instant they are first polled.total_idled_count | type: Counter
The total number of times that tasks idled, waiting to be awoken.total_idle_duration | type: Counter
The total duration that tasks idled.total_scheduled_count | type: Counter
The total number of times that tasks were awoken (and then, presumably, scheduled for execution).total_scheduled_duration | type: Counter
The total duration that tasks spent waiting to be polled after awakening.total_poll_count | type: Counter
The total number of times that tasks were polled.total_poll_duration | type: Counter
The total duration elapsed during polls.total_fast_poll_count | type: Counter
The total number of times that polling tasks completed swiftly.total_fast_poll_duration | type: Counter
The total duration of fast polls.total_slow_poll_count | type: Counter
The total number of times that polling tasks completed slowly.total_slow_poll_duration | type: Counter
The total duration of slow polls.total_short_delay_count | type: Counter
The total count of short scheduling delays.total_short_delay_duration | type: Counter
The total duration of short scheduling delays.total_long_delay_count | type: Counter
The total count of long scheduling delays.total_long_delay_duration | type: Counter
The total duration of long scheduling delays.tokio_task_total_first_poll_count] | type: Counter
The total number of tasks polled for the first time.tokio-metrics-collector is distributed under the terms of both the MIT license and the Apache License (Version 2.0).
See LICENSE-APACHE and LICENSE-MIT, and COPYRIGHT for details.