prometheus を理解するための数学

metrics type を理解する


Posted on Wed, Jun 19, 2019
Tags prometheus, math, metrics

Prometheus を理解するためには、データ構造を理解する必要がある

SRE エンジニアにとっては、すでに教養と言えるほど理解が必要になった prometheus ですが、あまり数学的に、かつ視覚的に理解する記事がなかったため、記録します。

Metrics Type

まず Prometheus で利用できるデータ構造についてです。

Metric types | Prometheus にあるとおり、大きく分けて 4 種類

Counter

見ての通りの積み重ね式 Counter タイプ。常に時間 t の増加に伴い、増加するグラフとなります。(つまり、any t にて a[t+1] - a[t] >= 0 となるような a)

Gauge

値が変動する Gauge タイプ。

Histogram

事前に定義した bucket にあわせて数をカウントする Histogram。後述の Summary との差が分かりづらいですが。

Observation という言葉が Histogram, Summary で出てきますが、これは観測値。 基本的に Observation が減らなければ (Observation が negativeでない)、左のグラフのように増加します。

any t にて

a1[t+1] - a1[t] >= 0, a2[t+1] - a2[t] >= 0, a3[t+1] - a3[t] >= 0

となり、さらに a1, a2, a3 は事前に定義したしきい値で分けられます。

exporter の実装としては、ある値 x に対して、a1, a2, a3 のどのバケットに入れるかを計算し、追加時にカウントを増やします。

Summary

個人的に分かりづらい Summary。Histogram との違いは、事前に rank estimator を定義して、各時間ごとに計算します。

例えば、rank estimator が q = 0.5, 0.95, 0.99 のパーセンタイルとしたとき、ある時刻 t に得られた値すべてに対して、q = 0.5, 0.95, 0.99 になる値を計算します。

Histograms and summaries | Prometheus にて、Histogram は client (exporter) での計算は少ない、一方で、Summary は client (exporter) での計算が多いというのは、各 rank についての計算を実施しないといけないからです。