prometheus-macros

Crates.ioprometheus-macros
lib.rsprometheus-macros
version0.1.0
sourcesrc
created_at2023-08-04 16:41:19.604998
updated_at2023-08-04 16:41:19.604998
descriptionMacros for declaring prometheus metrics
homepage
repositoryhttps://github.com/heat1q/prometheus-macros
max_upload_size
id935418
size26,041
Patrick Willner (heat1q)

documentation

https://docs.rs/prometheus-metrics

README

Prometheus Macros

GitHub Workflow Status (with event) docs.rs Crates.io

prometheus-macros offers advanced macros for defining prometheus metrics.

Motivation

This crate extends prometheus by introducing declarative macros that minimize boilerplate during the declaration and initialization of metrics. Multiple metrics are often needed, as seen for example in contexts like HTTP request where one needs to declare distinct metrics for request count and request latency.

Although prometheus already offers declarative macros for initializing individual metrics, it can still lead to significant boilerplate when declaring multiple metrics.

Example

use prometheus::{IntGauge, HistogramVec};
use prometheus_macros::composite_metric;

composite_metric! {
    struct CompositeMetric {
        #[name = "custom_gauge"]
        #[desc = "Example gauge metric"]
        custom_gauge: IntGauge,
        #[name = "custom_hist_vec"]
        #[desc = "Example histogram vec"]
        #[labels = ["foo", "bar"]]
        #[buckets = [0.01, 0.1, 0.2]]
        custom_hist_vec: HistogramVec,
    }
}

fn main() {
    let metric = CompositeMetric::register(prometheus::default_registry())
        .expect("failed to register metrics to default registry");
    // access the metrics
    metric.custom_gauge().set(420);
    metric.custom_hist_vec().with_label_values(&["a", "b"]).observe(0.5);
}
Commit count: 7

cargo fmt