https://github.com/marcopacini/ts_prometheus
A prometheus client in Typescript for Deno
https://github.com/marcopacini/ts_prometheus
deno metrics prometheus prometheus-client
Last synced: 7 months ago
JSON representation
A prometheus client in Typescript for Deno
- Host: GitHub
- URL: https://github.com/marcopacini/ts_prometheus
- Owner: marcopacini
- Created: 2020-06-18T20:42:16.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2023-11-14T15:20:00.000Z (over 2 years ago)
- Last Synced: 2025-08-24T21:40:03.154Z (8 months ago)
- Topics: deno, metrics, prometheus, prometheus-client
- Language: TypeScript
- Homepage:
- Size: 39.1 KB
- Stars: 32
- Watchers: 1
- Forks: 4
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-deno-cn - @marcopacini/ts-prometheus
README
# 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:
```ts
const myRegistry = new Registry();
const myCounter = Counter.with({
name: "my_counter",
help: "a counter with custom registry",
registry: [myRegistry],
});
```
## Examples
- [ts-prometheus](https://github.com/marcopacini/ts-prometheus/blob/master/example/example.ts)
- [oak](https://github.com/marcopacini/ts-prometheus/blob/master/example/oak/example.ts)
- [Hono](https://github.com/marcopacini/ts-prometheus/blob/master/example/hono/example.ts)
## Metric Types
### Counter
```ts
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);
```
```text
# HELP http_requests_total The total number of HTTP requests.
# TYPE http_requests_total counter
http_requests_total{method="GET",status="201"} 43
```
### Gauge
```ts
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
```ts
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 quantiles when not set are `[ .01, .05, .5, .95, .99 ]`.
```ts
let summary = Summary.with({
name: "http_response_size",
help: "A summary of the response size.",
quantiles: [.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{quantile="0.25"} 2
http_response_size{quantile="0.5"} 5
http_response_size{quantile="0.75"} 21
http_response_size{quantile="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.
```ts
Summary.with({
name: "http_response_size",
help: "A summary of the response size.",
quantiles: [.25, .5, .75, 1],
maxAge: 1000, // milliseconds
ageBuckets: 5, // number of observations
});
```