こんにちは!👋 今日は、システムおよびアプリケーション監視に不可欠なツールであるPrometheusの核となる要素、メトリックタイプについて、分かりやすく詳しく解説していきます。Prometheusを初めて使う方も、すでに利用している方も、この機会に概念をしっかりと固めましょう!🚀
システムの状況を正確に把握するためには、どのようなデータをどのように収集するかを決定することが非常に重要です。Prometheusは、この目的のために4つの主要なメトリックタイプを提供しています。それが、カウンター(Counter)、ゲージ(Gauge)、ヒストグラム(Histogram)、サマリー(Summary)です。それぞれのタイプがどのような特徴を持ち、いつ使用すべきか、これから一つずつ掘り下げていきましょう!

1. カウンター (Counter) 📈: ひたすら増加する数値
カウンターは、その名の通り累積される値を記録するメトリックタイプです。最大の特徴は、値がひたすら増加するのみである点です。まるで車の総走行距離計のように、後戻りせず前進するだけです。もちろん、システムが再起動されると0にリセットされることはあります。
- 🤔 いつ使う?
- Webサーバーの総HTTPリクエスト数
- API呼び出しの成功または失敗回数
- タスク完了件数
- エラー発生総回数
- 例: http_requests_total
- このメトリックは、サービス開始以降に受けたすべてのHTTPリクエストの総数を表します。
- 💡 重要ポイント!
- カウンター自体の値よりも、時間経過に伴う変化率(rate)を計算して「1秒あたりのリクエスト数」のような意味のあるデータを抽出するのに主に使われます。このためにPromQLのrate()やirate()関数を併用します。
2. ゲージ (Gauge) 🌡️: リアルタイムの状態を示す温度計
ゲージは、現在の状態の測定値を表すメトリックタイプです。カウンターとは異なり、値は増加することも減少することもできます。まるで温度計が周囲の温度に応じて上がったり下がったりするのと同じです。
- 🤔 いつ使う?
- 現在使用中のメモリ量
- アクティブなユーザーセッション数
- キュー(Queue)に積まれているタスクの数
- CPU使用率
- 例: memory_usage_bytes, cpu_temperature_celsius
- memory_usage_bytesは現在アプリケーションが使用しているメモリ量を、cpu_temperature_celsiusは現在のCPU温度を表します。これらの値は頻繁に変動します。
- 💡 重要ポイント!
- システムの現在の状態をスナップショットのように把握したい場合に有用です。
3. ヒストグラム (Histogram) 📊: データ分布を一目で把握
ヒストグラムは、もう少し複雑なメトリックタイプで、観測されたデータの分布を測定します。主にリクエスト処理時間(latency)や応答サイズ(response size)のように、値の分布を把握することが重要な場合に使用されます。
ヒストグラムは、データを事前に定義された複数のバケット(bucket)に分割して格納します。例えば、0.1秒以下、0.5秒以下、1秒以下といったバケットに分け、各リクエストが処理されるたびに該当するバケットのカウントを1ずつ増加させます。
- 🤔 いつ使う?
- APIリクエストの応答時間分布
- HTTPリクエストのサイズ分布
ヒストグラムは内部的に以下の複数の時系列データを作成します。
- _bucket{le=”<上限値>“}: 各バケットの上限値(le, less than or equal)以下の値の累積数
- _sum: すべての観測値の合計
- _count: 観測されたイベントの総回数
- 例: http_request_duration_seconds
- このメトリックを通じて、「全リクエストの95%が何秒以内に処理されたか?」のようなパーセンタイル(percentile)を計算できます。
- 💡 重要ポイント!
- 複数のインスタンスにわたってデータを集計(aggregate)し、パーセンタイルを計算するのに非常に有用です。サーバー側でPromQLのhistogram_quantile()関数を使用して柔軟に分位数計算が可能です。
4. サマリー (Summary) 📝: 正確なパーセンタイルのための要約
サマリーもヒストグラムと同様にデータの分布を測定するのに使用されます。しかし、動作方式に重要な違いがあります。サマリーは、サーバーでパーセンタイルを計算するヒストグラムとは異なり、クライアント(アプリケーション)側で直接パーセンタイル(quantile)を計算して公開します。
- 🤔 いつ使う?
- 応答時間の中央値(50th percentile)、95th percentile、99th percentileなどを正確に知りたい場合
サマリーは以下の時系列データを作成します。
- {quantile=”<分位数>“}: 設定された分位数に該当する値
- _sum: すべての観測値の合計
- _count: 観測されたイベントの総回数
- 例: http_request_duration_seconds (サマリータイプとして)
- このメトリックは、http_request_duration_seconds{quantile=”0.95″} のように直接的なパーセンタイル値を提供します。
- 💡 重要ポイント!
- クライアントで直接計算するため、パーセンタイル値自体は非常に正確です。しかし、複数のインスタンスのデータを集計して平均を出すなどの演算が不可能であるという大きな欠点があります。したがって、ほとんどの場合、集計が柔軟なヒストグラムの使用が推奨されます。
🧐 メトリックタイプ比較一覧
| メトリックタイプ | 特徴 | 主な使用事例 | PromQL関数例 |
| カウンター | 単調に増加する累積値 | リクエスト回数、エラー数 | rate(), increase() |
| ゲージ | 増減可能な現在値 | メモリ使用量、CPU温度 | avg_over_time() |
| ヒストグラム | データ分布 (サーバーで分位数計算) | 応答時間分布、リクエストサイズ | histogram_quantile() |
| サマリー | データ分布 (クライアントで分位数計算) | 正確な単一インスタンス分位数 | 直接参照 |
結論
これまでPrometheusの4つの主要なメトリックタイプについて見てきました。それぞれのタイプの特徴と用途をよく理解し、状況に応じたメトリックを使用することが、効果的な監視システムを構築するための第一歩です。
- 単純なカウントが必要ならカウンター!
- 現在の状態値を知りたいならゲージ!
- データ分布と集計が必要ならヒストグラム!
- 正確な個別のパーセンタイルが必要ならサマリー!
このガイドが皆さんのPrometheusの旅に役立つことを願っています!😊
タグ: Prometheus, Monitoring, Metric Types, Counter, Gauge, Histogram, Summary, Observability, DevOps
コメントを残す