21 stable releases

2.0.0 May 7, 2024
1.3.0 Apr 20, 2024
1.2.0 Jan 6, 2024
1.0.15 Dec 27, 2023
0.1.0 Aug 22, 2022

#166 in Debugging

Download history 4602/week @ 2024-01-25 5490/week @ 2024-02-01 5403/week @ 2024-02-08 5158/week @ 2024-02-15 5696/week @ 2024-02-22 5879/week @ 2024-02-29 6037/week @ 2024-03-07 5665/week @ 2024-03-14 5766/week @ 2024-03-21 5002/week @ 2024-03-28 5901/week @ 2024-04-04 6277/week @ 2024-04-11 7154/week @ 2024-04-18 6726/week @ 2024-04-25 7668/week @ 2024-05-02 5872/week @ 2024-05-09

28,714 downloads per month

MIT license

371 lines

crates.io docs.rs MIT License Build Test Audit

⏱ metrics-process

This crate provides a Prometheus-style process metrics collector for the metrics crate, supporting Linux, macOS, and Windows. The collector code is manually rewritten in Rust from the official Prometheus client for Go (client_golang).

Supported Metrics

This crate supports the following metrics provided by Prometheus for process metrics.

Metric name Help string
process_cpu_seconds_total Total user and system CPU time spent in seconds.
process_open_fds Number of open file descriptors.
process_max_fds Maximum number of open file descriptors.
process_virtual_memory_bytes Virtual memory size in bytes.
process_virtual_memory_max_bytes Maximum amount of virtual memory available in bytes.
process_resident_memory_bytes Resident memory size in bytes.
process_heap_bytes Process heap size in bytes.
process_start_time_seconds Start time of the process since the Unix epoch in seconds.
process_threads Number of OS threads in the process.

For each platform, it is equivalent to what the official Prometheus client for Go (client_golang) provides.


Prior to version 2.0.0, the process_cpu_seconds_total metric was Gauge instead of Counter. Enable use-gauge-on-cpu-seconds-total feature to use the previous behavior.

Metric name Linux macOS Windows
process_cpu_seconds_total x x x
process_open_fds x x x
process_max_fds x x x
process_virtual_memory_bytes x x x
process_virtual_memory_max_bytes x x
process_resident_memory_bytes x x x
process_start_time_seconds x x x
process_threads x x


If you only need to compile this crate on non-supported platforms, you can use the dummy feature. Enabling this feature activates a dummy collector, which returns an empty Metrics.


Use this crate with metrics-exporter-prometheus as an exporter like:

use std::thread;
use std::time::{Duration, Instant};

use metrics_exporter_prometheus::PrometheusBuilder;
use metrics_process::Collector;

let builder = PrometheusBuilder::new();
    .expect("failed to install Prometheus recorder");

let collector = Collector::default();
// Call `describe()` method to register help string.

loop {
    let s = Instant::now();
    // Periodically call `collect()` method to update information.

Or with axum (or any web application framework you like) to collect metrics whenever the /metrics endpoint is invoked like:

use axum::{routing::get, Router};
use metrics_exporter_prometheus::PrometheusBuilder;
use metrics_process::Collector;
use tokio::net::TcpListener;

async fn main() {
    let builder = PrometheusBuilder::new();
    let handle = builder
        .expect("failed to install Prometheus recorder");

    let collector = Collector::default();
    // Call `describe()` method to register help string.

    let app = Router::new().route(
        get(move || {
            // Collect information just before handling '/metrics'
    let listener = TcpListener::bind("").await.unwrap();
    axum::serve(listener, app).await.unwrap();


This crate offers the following features:

Feature Name Description
dummy Enables a dummy collector that returns an empty Metrics on non-supported platforms.
use-gauge-on-cpu-seconds-total Use a Gauge on process_cpu_seconds_total metrics instead of Counter to represent f64 value. This is a previous behavior prior to version 2.0.0.


The code follows the MIT license written in LICENSE. Contributors need to agree that any modifications sent to this repository follow the license.


~656K SLoC