Metrics — 数値で傾向を捕える
🐱 この章の目次
メトリクスとは
メトリクス(Metrics) は、時系列で記録される数値データです。 ある瞬間のスナップショットではなく、値の変化傾向(トレンド)を把握しアラートに使うのが主な目的です。 JVM で JMX MBean を通じてヒープ使用量やスレッド数を見ていたのと同じ発想ですが、Prometheus はプル型で言語を問わず統一的に収集できます。
メトリクスの 4 タイプ
Prometheus が定義する基本型は以下の 4 つです。
| 型 | 説明 | 例 |
|---|---|---|
| Counter | 単調増加する累積値 | リクエスト総数 |
| Gauge | 増減する瞬間値 | メモリ使用量 |
| Histogram | 観測値をバケットに分類 | レイテンシ分布 |
| Summary | クライアント側で分位数を計算 | P99 レイテンシ |
Counter は rate() で毎秒の変化率に変換して使います。
Histogram はサーバーサイドで分位数を計算できるため、Summary より柔軟です。
Prometheus のデータモデル
Prometheus はメトリクス名とラベルの組み合わせで時系列を識別します。
http_requests_total{method="GET", path="/users", status="200"} 1027
ラベルのカーディナリティ(組み合わせ数)が高すぎるとメモリを圧迫するため、ユーザー ID のような高カーディナリティ値をラベルに入れてはいけません。
PromQL の基本
PromQL は Prometheus のクエリ言語です。
# 直近 5 分間のリクエストレート(毎秒)
rate(http_requests_total{status=~"5.."}[5m])
# P95 レイテンシ
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))
rate() は Counter 専用、histogram_quantile() は Histogram 専用の関数です。
メトリクス選定手法
何を計測すべきかの指針として 2 つのメソッドがあります。
- USE Method(Utilization, Saturation, Errors)— インフラリソース向け
- RED Method(Rate, Errors, Duration)— サービス向け
USE はCPU・ディスク・ネットワークの健全性を、RED はエンドユーザー体験を反映します。 両方を組み合わせることで、インフラとアプリの両面をカバーできます。
Grafana で可視化
Grafana は Prometheus をデータソースとしてダッシュボードを構築するツールです。
# docker-compose.yml(抜粋)
services:
grafana:
image: grafana/grafana:11.1.0
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
PromQL をパネルに埋め込むだけで、リアルタイムのグラフとアラートルールを定義できます。