メトリックタイプの理解

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

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

Counter

カウンターは、増加またはリセットのみ可能なメトリック値です。つまり、前の値より値が減少することはありません。リクエスト数、エラー数などに使用できます。

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

go_gc_duration_seconds_count

Counter

PromQL の `rate()` 関数は、一定期間のメトリック履歴を取得し、1秒あたりの増加速度を計算します。Rate はカウンター値にのみ適用可能です。

rate(go_gc_duration_seconds_count[5m]) Rate Counter

Gauge

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

go_memstats_heap_alloc_bytes Gauge

ゲージメトリックには、`max_over_time`、`min_over_time`、`avg_over_time` などの PromQL 関数を使用できます。

Histogram

ヒストグラムは、前の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 操作について詳しく説明しました。

このページの内容