2 ポイント 投稿者 dongho42 2024-11-24 | まだコメントはありません。 | WhatsAppで共有
  • 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]) は NO
    • rate(counter_a[5m]) + rate(counter_b[5m]) は YES
  • sum() だけでなく、min(), max(), avg(), ceil(), histogram_quantile(), predict_linear() のようなものにも当てはまる話
  • counter に対する関数には rate() のほかに irate(), increase(), resets() もある

* が付いた要約は、原文にない補足説明であることを示しています。

まだコメントはありません。

まだコメントはありません。