メトリックの種類。

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.3 1
0 - 0.5 1
0 - 0.7 1
0 - 1 1
0 - 1.2 1
0 - +Inf 1

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

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

エンドポイント「/ping」のリクエスト2が0.4秒かかった場合、バケットのカウント値は次のようになります。

/ping

バケット カウント
0 - 0.3 1
0 - 0.5 2
0 - 0.7 2
0 - 1 2
0 - 1.2 2
0 - +Inf 2

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演算について詳しく説明しました。

このドキュメントはオープンソースです。問題やプルリクエストを提出して、改善にご協力ください。