メトリックタイプの理解
Prometheusは4種類のメトリックタイプをサポートしています。
- カウンター
- ゲージ
- ヒストグラム
- サマリー
カウンター
カウンターは、値が増加するかリセットされるだけで、以前の値よりも減少することはないメトリック値です。リクエスト数、エラー数などのメトリックに使用できます。
以下のクエリをクエリバーに入力して実行をクリックします。
go_gc_duration_seconds_count
PromQLのrate()関数は、一定期間のメトリックの履歴を取得し、値が1秒あたりどれだけ速く増加しているかを計算します。rateはカウンター値にのみ適用できます。
rate(go_gc_duration_seconds_count[5m])
ゲージ
ゲージは、増減する可能性のある数値です。クラスタ内のポッド数、キュー内のイベント数などのメトリックに使用できます。
max_over_time
、min_over_time
、avg_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_quantile()
関数は、ヒストグラムからクォンタイルを計算するために使用できます。
histogram_quantile(0.9,prometheus_http_request_duration_seconds_bucket{handler="/graph"})
グラフは90パーセンタイルが0.09であることを示しています。過去5分間のhistogram_quantileを見つけるには、rate()と時間枠を使用できます。
histogram_quantile(0.9, rate(prometheus_http_request_duration_seconds_bucket{handler="/graph"}[5m]))
サマリー
サマリーもイベントを測定し、ヒストグラムの代替手段です。これらは安価ですが、より多くのデータを失います。アプリケーションレベルで計算されるため、同じプロセスの複数のインスタンスからのメトリックの集計はできません。メトリックのバケットが事前に不明な場合に使用されますが、可能な限りサマリーよりもヒストグラムを使用することを強くお勧めします。
このチュートリアルでは、メトリックのタイプと、rate、histogram_quantileなどのいくつかのPromQL操作について詳しく説明しました。