web-dev-qa-db-ja.com

ゲージがカウンターとして機能することができる場合、Prometheusのカウンターとゲージの両方があるのはなぜですか?

CounterGaugeの間で決定するとき、 Prometheusのドキュメントはそれを述べています

カウンターとゲージの間を選択するには、簡単な経験則があります。値が下がる可能性がある場合はゲージです。カウンタは、上がっているだけ(そしてプロセスが再起動したときなど)リセットされます。

彼らは重複するユースケースをカバーしているようです:あなたは今までだけ上がるだけのゲージを使うことができます。それで、そもそもカウンターメトリックタイプを作成するのはなぜですか?なぜあなたは単にゲージを両方に使わないのですか?

9
Jose Armesto

概念的な観点から、ゲージとカウンターは異なる目的を持っています

  • ゲージは通常、通常彩度を検出する目的で状態を表す。
  • カウンタの絶対値は本当に意味がありません。実際の目的はむしろirate/rate()increase()のような関数を持つ進化(通常は利用)を計算することです。

これらの進化業務では、値のリセットを検出する必要があるため、ゲージでは達成できなかった増加の信頼性の高い計算が必要です。

技術的には、カウンタには2つの重要なプロパティがあります。

  1. 常に0から始まります
  2. それは常に増加します(すなわちコードにインクリメントされます)

アプリケーションが2つのPROMETHEUSスクラップ間で再起動すると、前のスクリープよりも小さいと、2番目のスクリープの値が回復する可能性が高い(最後のスクリープとリセットの間の増加を緩むため、やや)。

T1からT2のスクラップ間のカウンタの増加を計算するための簡単なアルゴリズムは次のとおりです。

  • counter(t2) >= counter(t1)increase=counter(t2)-counter(t1)
  • counter(2) < counter(t1)increase=counter(t2)

結論として、テクニカルな観点からは、起動時に0にリセットし、それを増やすだけでなく、契約の違反は誤った値になると、カウンタの代わりにゲージを使用できます。

サイドノートとして、ゲージが浮動小数点表現を使用している間に、符号なし整数表現を使用するためのカウンタ実装も期待しています。これには、0にオーバーフローする機能などのコードにいくつかのマイナーな影響があり、現在のCPU上の原子演算に対する原子力をサポートしています。

3
Michael Doubez

カウンターのためにあなたがそれがどれほど速くなっているかを気にかけているのに対して、あなたは実際の価値を気にしています。 (理論的には)ゲージが発生することができますが、それはそれらをカウンターにしません。

0
brian-brazil