メトリックタイプの理解

Prometheusは4種類のメトリックタイプをサポートしています。

  • カウンター
  • ゲージ
  • ヒストグラム
  • サマリー

カウンター

カウンターは、値が増加するかリセットされるだけで、以前の値よりも減少することはないメトリック値です。リクエスト数、エラー数などのメトリックに使用できます。

以下のクエリをクエリバーに入力して実行をクリックします。

go_gc_duration_seconds_count

Counter

PromQLのrate()関数は、一定期間のメトリックの履歴を取得し、値が1秒あたりどれだけ速く増加しているかを計算します。rateはカウンター値にのみ適用できます。

rate(go_gc_duration_seconds_count[5m]) Rate Counter

ゲージ

ゲージは、増減する可能性のある数値です。クラスタ内のポッド数、キュー内のイベント数などのメトリックに使用できます。

go_memstats_heap_alloc_bytes Gauge

max_over_timemin_over_timeavg_over_timeのようなPromQL関数は、ゲージメトリックに使用できます。

ヒストグラム

ヒストグラムは、これまでの2つと比較してより複雑なメトリックタイプです。ヒストグラムは、バケット値に基づいてカウントされる計算値に使用できます。バケットの境界は開発者が設定できます。一般的な例としては、リクエストへの応答にかかる時間であるレイテンシーがあります。

例: APIリクエストの処理にかかる時間を監視したいと仮定します。各リクエストの時間を保存する代わりに、ヒストグラムを使用するとそれらをバケットに保存できます。たとえば、0.3以下0.5以下0.7以下1以下1.2以下のように時間のバケットを定義します。これらが私たちのバケットであり、リクエストにかかる時間が計算されると、測定値よりもバケット境界が高いすべてのバケットのカウントに追加されます。

エンドポイント「/ping」へのリクエスト1が0.25秒かかるとします。バケットのカウント値は次のようになります。

/ping

バケットカウント
0 - 0.31
0 - 0.51
0 - 0.71
0 - 11
0 - 1.21
0 - +Inf1

注: +Infバケットはデフォルトで追加されます。

(ヒストグラムは累積頻度であるため、値よりも大きいすべてのバケットに1が追加されます)

エンドポイント「/ping」へのリクエスト2が0.4秒かかるとします。バケットのカウント値は次のようになります。

/ping

バケットカウント
0 - 0.31
0 - 0.52
0 - 0.72
0 - 12
0 - 1.22
0 - +Inf2

0.4は0.5未満であるため、その境界までのすべてのバケットがカウントを増加させます。

Prometheus UIからヒストグラムメトリックを調べて、いくつかの関数を適用してみましょう。

prometheus_http_request_duration_seconds_bucket{handler="/graph"}

Histogram

histogram_quantile()関数は、ヒストグラムからクォンタイルを計算するために使用できます。

histogram_quantile(0.9,prometheus_http_request_duration_seconds_bucket{handler="/graph"})

Histogram Quantile

グラフは90パーセンタイルが0.09であることを示しています。過去5分間のhistogram_quantileを見つけるには、rate()と時間枠を使用できます。

histogram_quantile(0.9, rate(prometheus_http_request_duration_seconds_bucket{handler="/graph"}[5m]))

Histogram Quantile Rate

サマリー

サマリーもイベントを測定し、ヒストグラムの代替手段です。これらは安価ですが、より多くのデータを失います。アプリケーションレベルで計算されるため、同じプロセスの複数のインスタンスからのメトリックの集計はできません。メトリックのバケットが事前に不明な場合に使用されますが、可能な限りサマリーよりもヒストグラムを使用することを強くお勧めします。

このチュートリアルでは、メトリックのタイプと、rate、histogram_quantileなどのいくつかのPromQL操作について詳しく説明しました。

このページの内容