# 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. ```rust use metriken::{metric, Counter, Gauge, Value}; /// A counter metric named "::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}: ") } } } ``` 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.