substreams-sink-prometheus
is a tool that allows developers to pipe data extracted metrics from a blockchain into a Prometheus time series database.
📖 Documentation
Further resources
CLI
Use pre-built binaries
Install globally via npm
$ npm install -g substreams-sink-prometheus
Run
$ substreams-sink-prometheus run [options] <spkg>
Open the browser at http://localhost:9102/metrics
🛠Feature Roadmap
Summaries calculate percentiles of observed values.
Install
$ cargo add substreams-sink-prometheus
Quickstart
Cargo.toml
[dependencies]
substreams = "0.5"
substreams-sink-prometheus = "0.1"
src/lib.rs
use std::collections::HashMap;
use substreams::prelude::*;
use substreams::errors::Error;
use substreams_sink_prometheus::{PrometheusOperations, Counter, Gauge, Summary, Histogram};
#[substreams::handlers::map]
fn prom_out(
... some stores ...
) -> Result<PrometheusOperations, Error> {
let mut prom_ops: PrometheusOperations = Default::default();
let mut counter = Counter::from("counter_name");
prom_ops.push(counter.inc());
prom_ops.push(counter.add(123.456));
let labels1 = HashMap::from([("label1".to_string(), "value1".to_string())]);
let mut labels2 = HashMap::new();
labels2.insert("label2".to_string(), "value2".to_string());
let mut gauge = Gauge::from("gauge_name").with(labels1);
prom_ops.push(gauge.set(88.8));
prom_ops.push(gauge.inc());
prom_ops.push(gauge.dec());
prom_ops.push(gauge.add(50.0));
prom_ops.push(gauge.add(-10.0));
prom_ops.push(gauge.sub(25.0));
prom_ops.push(gauge.sub(-5.0));
prom_ops.push(gauge.set_to_current_time());
prom_ops.push(gauge.remove(labels2));
prom_ops.push(gauge.reset());
let mut summary = Summary::from("summary_name");
prom_ops.push(summary.observe(88.8));
prom_ops.push(summary.start_timer());
let mut histogram = Histogram::from("histogram_name");
prom_ops.push(histogram.observe(88.8));
prom_ops.push(histogram.start_timer());
prom_ops.push(histogram.zero(HashMap::from([("label1".to_string(), "value1".to_string())])));
Ok(prom_ops)
}