#async #futures #metrics #debugging


Runtime and task level metrics for Tokio applications

2 unstable releases

Uses new Rust 2021

0.1.0 Feb 18, 2022
0.0.0 Feb 17, 2022

#316 in Asynchronous

Download history 2175/week @ 2022-06-06 2732/week @ 2022-06-13 2416/week @ 2022-06-20 2054/week @ 2022-06-27 2600/week @ 2022-07-04 2596/week @ 2022-07-11 3682/week @ 2022-07-18 3702/week @ 2022-07-25 3998/week @ 2022-08-01 4120/week @ 2022-08-08 4172/week @ 2022-08-15 3498/week @ 2022-08-22 3444/week @ 2022-08-29 3649/week @ 2022-09-05 3811/week @ 2022-09-12 3445/week @ 2022-09-19

14,744 downloads per month
Used in 3 crates (2 directly)

MIT license


Tokio Metrics

Provides utilities for collecting metrics from a Tokio application, including runtime and per-task metrics.

tokio-metrics = { version = "0.1.0", default-features = false }

Getting Started With Task Metrics

Use TaskMonitor to instrument tasks before spawning them, and to observe metrics for those tasks. All tasks instrumented with a given TaskMonitor aggregate their metrics together. To split out metrics for different tasks, use separate TaskMetrics instances.

// construct a TaskMonitor
let monitor = tokio_metrics::TaskMonitor::new();

// print task metrics every 500ms
    let frequency = std::time::Duration::from_millis(500);
    let monitor = monitor.clone();
    tokio::spawn(async move {
        for metrics in monitor.intervals() {
            println!("{:?}", metrics);

// instrument some tasks and spawn them
loop {

Getting Started With Runtime Metrics

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 in the root directory of your crate with the contents:

rustflags = ["--cfg", "tokio_unstable"]
rustdocflags = ["--cfg", "tokio_unstable"] 

The rt feature of tokio-metrics is on by default; simply check that you do not set default-features = false when declaring it as a dependency; e.g.:

tokio-metrics = "0.1.0"

From within a Tokio runtime, use RuntimeMonitor to monitor key metrics of that runtime.

let handle = tokio::runtime::Handle::current();
let runtime_monitor = RuntimeMonitor::new(&handle);

// print runtime metrics every 500ms
let frequency = std::time::Duration::from_millis(500);
tokio::spawn(async move {
    for metrics in runtime_monitor.intervals() {
        println!("Metrics = {:?}", metrics);

// run some tasks

Relation to Tokio Console

Currently, Tokio Console is primarily intended for local debugging. Tokio metrics is intended to enable reporting of metrics in production to your preferred tools. Longer term, it is likely that tokio-metrics will merge with Tokio Console.


This project is licensed under the MIT license.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in tokio-metrics by you, shall be licensed as MIT, without any additional terms or conditions.


~14K SLoC