Prometheusの`irate`がスパイクを捉えられない理由
(valyala.medium.com)- PromQLで per-second rate を計算するために使われる
rateとirate irateは [range] の間のスパイクを捉え、rateはそれらのスパイクを平均化するという誤解が存在irateは最後の 2 つの data points の per-second rate だけを計算する- query_range の各 query で見ることになる最後の 2 つの data points が何になるかは、
start、end、stepパラメータに依存する- したがって、
irateに依存するダッシュボードは zooming や scrolling によって大きく変化する
- したがって、
- 急激に変化する counter では、
irateではすべてのスパイクを捉えるのは難しい
- MetricsQL(PromQL と大半の互換性がある Query Language)ではこのために、
rollup_rate関数をサポートしている - この関数は隣接する各 data point 同士の rate を求め、その
min、avg、maxを返す - そのため、すべてのスパイクを一貫して
minとmaxに捉えられる - 実際にダッシュボードで可視化してみると、
rollup_rate(min)<=irate<=rollup_rate(max)を満たす band を確認できる
irateに関するもう 1 つの誤解は、rateより高速だということ- おそらく [range] interval の間に与えられた data point のうち最後の 2 つだけを見るため、そのように感じるのかもしれない
- しかし実際に Prometheus が最も多くの CPU time を使うのは、query_range API を使う際に [start...end] interval の data point を抽出する部分
- どの関数を使うかは、性能に大きな影響はない
ブログ記事では説明されていないので補足すると、rollup_rate の rollup="avg" 値を使うことと、rate に単に avg を使うことの違いについては、MetricsQL 開発者による別の回答で確認できます。
まだコメントはありません。