Prometheus metric syntax

From wikinotes

Syntax used to expose metrics to prometheus.

Documentation

official docs https://prometheus.io/docs/instrumenting/exposition_formats/
text-based https://prometheus.io/docs/instrumenting/exposition_formats/#text-format-details
metric types https://prometheus.io/docs/concepts/metric_types/
writing exporters https://prometheus.io/docs/instrumenting/writing_exporters/

Comments

In addition to regular comments, doc-comments exist for

  • HELP describing metrics
  • TYPE describing metric type
# regular comment               // possibly invalid?

# HELP metric_name  Does thing  // description of metric
# TYPE metric_name  counter     // counter, gauge, historgram

Metrics

my_metric 1.2

my_metric{hostname="foobar", user="baz"}  1.2

Metric Datatypes

Scalar

// always a float
12.34

Native-Histograms (experimental)

Newer, More-accurate, simpler-to-use histogram type.
One metric is emitted (a complex type, a struct under the hood)
Bucket Sizes do not need to be configured manually.

# p99, from grafana, in 2m sample-sizes
histogram_quantile(0.99, sum(rate(my_metric{}[2m])))

# number of points in each 2m sample-size
histogram_count(increase(my_metric{}[2m]))


# sum of points in each 2m sample-size
histogram_sum # todo

Histograms

The old histograms create/emit multiple metrics from your metric with the suffixes:

  • _bucket
  • _count
# for 1x emitted 'my_metric', it creates:
my_metric_bucket{le="10"}   123
my_metric_bucket{le="20"}   456
my_metric_bucket{le="+Inf"} 789
my_metric_bucket_count      ...
my_metric_bucket_sum        ...

Here le represents all points within the sample-range of less-than-or-equal to $X.
The bucket sizes must be manually configured.