20 releases (11 breaking)

0.12.4 Aug 26, 2025
0.12.3 Mar 10, 2025
0.12.0 Feb 26, 2025
0.10.0 Sep 18, 2024
0.4.0 Mar 29, 2024

#2109 in Database interfaces

Download history 340/week @ 2025-09-21 190/week @ 2025-09-28 138/week @ 2025-10-05 140/week @ 2025-10-12 177/week @ 2025-10-19 154/week @ 2025-10-26 219/week @ 2025-11-02 116/week @ 2025-11-09 95/week @ 2025-11-16 119/week @ 2025-11-23 122/week @ 2025-11-30 105/week @ 2025-12-07 192/week @ 2025-12-14 61/week @ 2025-12-21 128/week @ 2025-12-28 656/week @ 2026-01-04

1,037 downloads per month
Used in rezolus

MIT/Apache

45KB
905 lines

Exposition of Metriken metrics

Provides a standardized struct for a snapshot of the metric readings as well as a way of producing the snapshots.


metriken

Easily registered distributed metrics.

metriken allows you to easily declare static metrics throughout your codebase. Then, when you want to expose those metrics, you can access them all in one place.

use metriken::{metric, Counter, Gauge, Value};

/// A counter metric named "<crate name>::COUNTER"
#[metric]
static COUNTER: Counter = Counter::new();

/// A gauge metric named "my.metric"
#[metric(name = "my.metric")]
static GAUGE: Gauge = Gauge::new();

fn main() {
    COUNTER.increment();

    for metric in &metriken::metrics() {
        let name = metric.name();

        match metric.value() {
            Some(Value::Counter(val)) => println!("{name}: {val}"),
            Some(Value::Gauge(val)) => println!("{name}: {val}"),
            _ => println!("{name}: <custom>")
        }
    }
}

Code updating the metrics can always access them without needing to go through any indirections. (It just means accessing a static!). Using linkme, the metrics are all gathered into a single global array that can then be used to read all of them and expose them.

Dependencies

~4–11MB
~226K SLoC