Metrics (Prometheus)¶
Hypern includes a built-in metrics registry for collecting application metrics in Prometheus text exposition format. The registry is implemented in Rust for high performance using lock-free atomics.
Quick Start¶
from hypern._hypern import MetricsRegistry
metrics = MetricsRegistry()
# Counter
metrics.counter_inc("http_requests_total", {"method": "GET", "path": "/api"})
# Gauge
metrics.gauge_set("active_connections", {}, 42.0)
# Histogram
metrics.histogram_observe("request_duration_seconds", {}, 0.123)
# Expose metrics endpoint
@app.get("/metrics")
def prometheus_metrics(req, res, ctx):
res.headers["Content-Type"] = "text/plain; version=0.0.4; charset=utf-8"
res.body = metrics.render()
Metric Types¶
Counter¶
A monotonically increasing value (e.g. total requests, errors).
metrics.counter_inc("http_requests_total", {"method": "GET", "status": "200"})
metrics.counter_inc("http_requests_total", {"method": "POST", "status": "201"})
Gauge¶
A value that can go up or down (e.g. active connections, queue size).
metrics.gauge_set("active_connections", {}, 10.0)
metrics.gauge_inc("active_connections", {}) # 11.0
metrics.gauge_dec("active_connections", {}) # 10.0
Histogram¶
Observes values and tracks count/sum (e.g. request latency).
metrics.histogram_observe("request_duration_seconds", {"path": "/api"}, 0.042)
metrics.histogram_observe("request_duration_seconds", {"path": "/api"}, 0.158)
Help Text¶
Add descriptive help text to metrics:
metrics.set_help("http_requests_total", "Total number of HTTP requests")
metrics.set_help("request_duration_seconds", "Request duration in seconds")
Prometheus Output¶
Call metrics.render() to get Prometheus text exposition format:
# HELP http_requests_total Total number of HTTP requests
# TYPE http_requests_total counter
http_requests_total{method="GET",status="200"} 42
# HELP request_duration_seconds Request duration in seconds
# TYPE request_duration_seconds histogram
request_duration_seconds_count{path="/api"} 2
request_duration_seconds_sum{path="/api"} 0.2
API Reference¶
MetricsRegistry¶
| Method | Description |
|---|---|
counter_inc(name, labels) |
Increment a counter by 1 |
gauge_set(name, labels, value) |
Set a gauge to a specific value |
gauge_inc(name, labels) |
Increment a gauge by 1 |
gauge_dec(name, labels) |
Decrement a gauge by 1 |
histogram_observe(name, labels, value) |
Record a histogram observation |
set_help(name, help_text) |
Set help text for a metric |
render() |
Render all metrics in Prometheus text format |
Parameters:
name(str): Metric name (e.g."http_requests_total")labels(dict): Label key-value pairs (e.g.{"method": "GET"})value(float): Metric value (for gauge_set and histogram_observe)help_text(str): Descriptive help text