prometheus を理解するための数学

metrics type を理解する


Posted by Akira Masuda 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 についての計算を実施しないといけないからです。

comments powered by Disqus