Counter, Gauge, Histogram #

The objects returned by the declaration methods of Metrics.

import { Counter, Gauge, Histogram, LabelValues } from 'kuzzle-prometheus';

Their methods depend on the metric's labels:

  • a metric declared without labelNames takes no labels argument;
  • otherwise, every method takes the label values first, as a LabelValues<L> object (Record<L, string | number>) that must give every label.
const errors = metrics.counter({
  name: 'decode_errors_total',
  help: 'Payloads that could not be decoded',
  labelNames: ['protocol'],
});

errors.inc({ protocol: 'mqtt' }); // ok
errors.inc({ proto: 'mqtt' }); // type error: unknown label
errors.inc(); // type error: protocol is missing

A label combination past maxLabelSets is dropped (see Keep labels bounded).

Counter #

Without labelsWith labelsDescription
inc(value?: number): voidinc(labels: LabelValues<L>, value?: number): voidadds value (default 1)

Gauge #

Without labelsWith labelsDescription
set(value: number): voidset(labels: LabelValues<L>, value: number): voidsets the value
inc(value?: number): voidinc(labels: LabelValues<L>, value?: number): voidadds value (default 1)
dec(value?: number): voiddec(labels: LabelValues<L>, value?: number): voidsubtracts value (default 1)

Histogram #

Without labelsWith labelsDescription
observe(value: number): voidobserve(labels: LabelValues<L>, value: number): voidrecords a value
startTimer(): () => numberstartTimer(labels: LabelValues<L>): () => numberstarts a timer; the returned function records the elapsed time, in seconds, and returns it
const duration = metrics.histogram({
  name: 'decode_duration_seconds',
  help: 'Time to decode a payload',
  labelNames: ['protocol'],
});

const stop = duration.startTimer({ protocol: 'mqtt' });
decode(payload);
const seconds = stop();