ts_prometheus
A prometheus client for Deno that supports counter, gauge, histrogram and summary metric types.
Usage
By default all metrics are registered in the global Registry
accessible via
Registry.default
. The Registry
class has the method metrics()
that returns
the text-based exposition for all metrics collected. But it is possible
specified one or more custom registry:
const myRegistry = new Registry();
const myCounter = Counter.with({
name: "my_counter",
help: "a counter with custom registry",
registry: [myRegistry],
});
Examples
Metric Types
Counter
const counter = Counter.with({
name: "http_requests_total",
help: "The total number of HTTP requests.",
labels: ["method", "status"],
});
const totalGetCreate = counter.labels({
method: "GET",
status: "201",
});
totalGetCreate.inc();
totalGetCreate.inc(42);
# HELP http_requests_total The total number of HTTP requests.
# TYPE http_requests_total counter
http_requests_total{method="GET",status="201"} 43
Gauge
const gauge = Gauge.with({
name: "cpu_time_usage",
help: "The CPU time usage.",
labels: ["mode"],
});
const cpuIdle = gauge.labels({
mode: "idle",
});
cpuIdle.set(0);
cpuIdle.inc();
cpuIdle.inc(42);
cpuIdle.dec();
cpuIdle.dec(3.14);
# HELP cpu_time_usage The CPU time usage.
# TYPE cpu_time_usage gauge
cpu_time_usage{mode="idle"} 38.86
Histogram
const histogram = Histogram.with({
name: "http_requests_duration",
help: "A histogram of the requests duration.",
buckets: [.05, .1, .2, .5, 1, 3],
});
histogram.observe(.42);
histogram.observe(.58);
# HELP http_requests_duration A histogram of the requests duration.
# TYPE http_requests_duration histogram
http_requests_duration_bucket{le="0.05"} 0
http_requests_duration_bucket{le="0.1"} 0
http_requests_duration_bucket{le="0.2"} 0
http_requests_duration_bucket{le="0.5"} 1
http_requests_duration_bucket{le="1"} 2
http_requests_duration_bucket{le="3"} 2
http_requests_duration_bucket{le="+Inf"} 2
http_requests_duration_sum 1
http_requests_duration_count 2
Summary
By default percentiles when not set are [ .01, .05, .9, .95, .99 ]
.
let summary = Summary.with({
name: "http_response_size",
help: "A summary of the response size.",
percentiles: [.25, .5, .75, 1],
});
let values = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
values.forEach((v) => summary.observe(v));
# HELP http_response_size A summary of the response size.
# TYPE http_response_size summary
http_response_size{percentile="0.25"} 2
http_response_size{percentile="0.5"} 5
http_response_size{percentile="0.75"} 21
http_response_size{percentile="1"} 55
http_response_size_sum 143
http_response_size_count 10
A sliding time window can be set using maxAge
for defining the age of
observation in milliseconds, or ageBuckets
for limiting the max number of
observations.
Summary.with({
name: "http_response_size",
help: "A summary of the response size.",
percentiles: [ .25, .5, .75, 1 ]
maxAge: 1000 // milliseconds
ageBuckets: 5 // number of observations
});