rateしてからsumはYES、sumしてからrateはNO
(robustperception.io)- Prometheusでcounterを扱うとき、
rateのような counter 専用関数と aggregation を適用する際に陥りやすいミスがある - Prometheusでcounterは、「増加する」「維持される」「リセットされる」のみが起こりうる
- Node Exporterの秒間リクエスト率を求めたいとき、次のようなクエリは書ける?
sum by (job)(rate(http_requests_total{job="node"}[5m]))
- では、次のようなクエリは?
rate(sum by (job)(http_requests_total{job="node"})[5m])- このクエリには問題がある
- もしあるノードが再起動されると、そのノード上の Node Exporter の
http_requests_totalは 0 にリセットされる- すると全体の
sum(...)の値は減少する rate()は counter がリセットされたと判断し、誤ったスパイクが発生する- *nからn-aだけ値が減ると、rateの観点では (n-a) だけ値が跳ねたように見えるため
- すると全体の
- したがって...
rate(counter_a[5m] + counter_b[5m])は NOrate(counter_a[5m]) + rate(counter_b[5m])は YES
sum()だけでなく、min(),max(),avg(),ceil(),histogram_quantile(),predict_linear()のようなものにも当てはまる話- counter に対する関数には
rate()のほかにirate(),increase(),resets()もある
* が付いた要約は、原文にない補足説明であることを示しています。
まだコメントはありません。