Package Exports
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (substreams-sink-prometheus) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Substreams
Prometheus sink module
substreams-sink-prometheus
is a tool that allows developers to pipe data extracted metrics from a blockchain into a Prometheus time series database.
📖 Documentation
https://docs.rs/substreams-sink-prometheus
Further resources
CLI
- MacOS
- Linux
- Windows
Install globally via npm
$ npm install -g substreams-sink-prometheus
Run
$ substreams-sink-prometheus run [options] <spkg>
- Install
npm install -g substreams-sink-prometheus
- Run Sink
substreams-sink-prometheus run [<manifest>] [<module_name>] [flags]
Open the browser at http://localhost:9102/metrics
🛠 Feature Roadmap
Gauge Metric
- Set
- Inc
- Dec
- Add
- Sub
- SetToCurrentTime
- Remove
- Reset
Counter Metric
- Inc
- Add
- Remove
- Reset
Histogram Metric
- Observe
- buckets
- zero
Summary Metric
Summaries calculate percentiles of observed values.
- Observe
- percentiles
- maxAgeSeconds
- ageBuckets
- startTimer
Registry
- Clear
- SetDefaultLabels
- RemoveSingleMetric
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};
#[substreams::handlers::map]
fn prom_out(
... some stores ...
) -> Result<PrometheusOperations, Error> {
// Initialize Prometheus Operations container
let mut prom_ops: PrometheusOperations = Default::default();
// Counter Metric
// ==============
// Initialize Gauge with a name & labels
let mut counter = Counter::from("counter_name");
// Increments the Counter by 1.
prom_ops.push(counter.inc());
// Adds an arbitrary value to a Counter. (Returns an error if the value is < 0.)
prom_ops.push(counter.add(123.456));
// Labels
// ======
// Create a HashMap of labels
// Labels represents a collection of label name -> value mappings.
let labels1 = HashMap::from([("label1".to_string(), "value1".to_string())]);
let mut labels2 = HashMap::new();
labels2.insert("label2".to_string(), "value2".to_string());
// Gauge Metric
// ============
// Initialize Gauge
let mut gauge = Gauge::from("gauge_name").with(labels1);
// Sets the Gauge to an arbitrary value.
prom_ops.push(gauge.set(88.8));
// Increments the Gauge by 1.
prom_ops.push(gauge.inc());
// Decrements the Gauge by 1.
prom_ops.push(gauge.dec());
// Adds an arbitrary value to a Gauge. (The value can be negative, resulting in a rease of the Gauge.)
prom_ops.push(gauge.add(50.0));
prom_ops.push(gauge.add(-10.0));
// Subtracts arbitrary value from the Gauge. (The value can be negative, resulting in an rease of the Gauge.)
prom_ops.push(gauge.sub(25.0));
prom_ops.push(gauge.sub(-5.0));
// Set Gauge to the current Unix time in seconds.
prom_ops.push(gauge.set_to_current_time());
// Remove metrics for the given label values
prom_ops.push(gauge.remove(labels2));
// Reset gauge values
prom_ops.push(gauge.reset());
Ok(prom_ops)
}