🐱 うさねこ教室 Python と可観測性の教室

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 をパネルに埋め込むだけで、リアルタイムのグラフとアラートルールを定義できます。