prometheus
stableFormats and parses Prometheus exposition text and provides a MetricRegistry class for building counter, gauge, histogram, and summary output.
use plugin prometheus Plugin snippets can be edited in the Playground, but native capabilities are executed locally with the Zolo CLI.
Functions (16)
- format_counter Format a counter metric line
- format_gauge Format a gauge metric line
- format_histogram_bucket Format a histogram bucket line
- format_help Format a `# HELP` comment line
- format_type Format a `# TYPE` comment line
- format_metric Format a generic metric line with optional timestamp
- parse_metric_line Parse a metric exposition line
- format_summary Format a summary metric with quantiles
- MetricRegistry Creates a registry that tracks counter, gauge, and histogram definitions and their samples.
- register_counter Register a counter definition
- register_gauge Register a gauge definition
- register_histogram Register a histogram definition
- inc Increment a counter
- set_gauge Set a gauge value
- observe Record a histogram observation
- expose Render full Prometheus exposition text
From import to result
- 01Import only what you use
- 02Copy the smallest example
- 03Run it with the Zolo CLI
Format a counter metric line
Formats a single counter metric line. labels is an optional map of label key-value pairs.
use plugin prometheus::{format_counter}
let line = format_counter("http_requests_total", 142, #{"method": "GET", "status": "200"})
print(line)
// http_requests_total{method="GET",status="200"} 142Format a gauge metric line
Formats a gauge metric line. Identical format to a counter line — use context and # TYPE to distinguish.
use plugin prometheus::{format_gauge, format_help, format_type}
print(format_help("memory_bytes", "Current process memory usage in bytes"))
print(format_type("memory_bytes", "gauge"))
print(format_gauge("memory_bytes", 52428800))Format a histogram bucket line
Formats one histogram bucket line. le is the upper-bound string (use "+Inf" for the catch-all bucket).
use plugin prometheus::{format_histogram_bucket}
print(format_histogram_bucket("request_duration_seconds", "0.1", 45))
print(format_histogram_bucket("request_duration_seconds", "0.5", 89))
print(format_histogram_bucket("request_duration_seconds", "+Inf", 100))Format a `# HELP` comment line
Returns a # HELP line for a metric.
use plugin prometheus::{format_help}
print(format_help("rpc_errors_total", "Total number of RPC errors"))
// # HELP rpc_errors_total Total number of RPC errorsFormat a `# TYPE` comment line
Returns a # TYPE line. Valid type strings: counter, gauge, histogram, summary, untyped.
use plugin prometheus::{format_type}
print(format_type("rpc_errors_total", "counter"))
// # TYPE rpc_errors_total counterFormat a generic metric line with optional timestamp
Formats a metric line with optional labels and an optional Unix millisecond timestamp.
use plugin prometheus::{format_metric}
let line = format_metric("up", #{"job": "api"}, 1, 1609459200000)
print(line)
// up{job="api"} 1 1609459200000Parse a metric exposition line
Parses a single Prometheus text exposition line and returns #{name, labels, value}. Returns nil for blank or comment lines.
use plugin prometheus::{parse_metric_line}
let m = parse_metric_line(r#"http_requests_total{method="GET"} 142"#)
print(m["name"]) // http_requests_total
print(m["value"]) // 142Format a summary metric with quantiles
Formats a complete summary block: quantile lines, _sum, and _count. quantiles is a table of #{quantile, value} entries.
use plugin prometheus::{format_summary}
let qs = [
#{"quantile": "0.5", "value": 0.23},
#{"quantile": "0.95", "value": 0.91},
#{"quantile": "0.99", "value": 1.42}
]
print(format_summary("request_latency_seconds", qs, 47.3, 200))Creates a registry that tracks counter, gauge, and histogram definitions and their samples.
Creates a registry that tracks counter, gauge, and histogram definitions and their samples. Use expose() to render the full text output.
use plugin prometheus::{MetricRegistry}
let reg = MetricRegistry()
reg.register_counter("api_calls_total", "Number of API calls")
reg.inc("api_calls_total", #{"endpoint": "/search"}, 1)
print(reg.expose())Register a counter definition
Registers a counter definition in the registry. Must be called before inc.
reg.register_counter("cache_hits_total", "Cache lookup hits")Register a gauge definition
Registers a gauge definition. Use set_gauge to update its value.
reg.register_gauge("active_connections", "Open TCP connections")
reg.set_gauge("active_connections", #{}, 42)Register a histogram definition
Registers a histogram. buckets is an optional array of upper bound floats. Defaults to standard HTTP latency buckets (0.005..10).
reg.register_histogram("response_time_seconds", "Request latency",
[0.01, 0.05, 0.1, 0.25, 0.5, 1.0, 5.0])Increment a counter
Increments a counter by amount (default 1). Labels is an optional map.
reg.inc("api_calls_total", #{"method": "POST"}, 1)
reg.inc("api_calls_total", #{"method": "GET"})Set a gauge value
Sets a gauge to an exact value. Replaces any existing value for the same name and label set.
reg.set_gauge("active_connections", #{}, 17)Record a histogram observation
Records an observation for a histogram. The value is sorted into the appropriate buckets on expose.
reg.observe("response_time_seconds", 0.043, #{"route": "/api/users"})Render full Prometheus exposition text
Renders the full Prometheus text exposition for all registered metrics.
use plugin prometheus::{MetricRegistry}
let reg = MetricRegistry()
reg.register_counter("requests_total", "Requests served")
reg.inc("requests_total", #{})
let output = reg.expose()
print(output)