【2026年版】Prometheusの始め方 — メトリクス監視の入門


Prometheus によるメトリクス監視の仕組み Node Exporter CPU / Memory / Disk App Metrics HTTP リクエスト数等 kube-state-metrics Pod / Deployment 状態 15秒ごとに スクレイピング (Pull型) Prometheus 時系列DB PromQLでクエリ :9090 Grafana ダッシュボード グラフ・ゲージ表示 :3000 Alertmanager Slack / PagerDuty 通知 PrometheusがPull型でメトリクスを収集し、Grafanaで可視化
Prometheus によるメトリクス監視のアーキテクチャ
🎚 難易度 ★★☆ 中級者向け
⏱ 学習時間の目安 読むだけ12分、環境構築込み40分
📚 前提知識 Linuxの基本コマンドとsystemdサービスの概念を知っている・Dockerの基本操作ができる・HTTPとポート番号の概念を知っている
✅ このガイドで学べること
  • Prometheusのプル型メトリクス収集の仕組みを説明できる
  • PrometheusとNode Exporterを起動してシステムメトリクスを収集できる
  • PromQLで基本的なクエリを書いてメトリクスを可視化できる
  • Grafanaでダッシュボードを作成しAlertmanagerでアラートを設定できる

クイックリファレンス

Docker Composeで一発起動(Prometheus + Grafana)

# docker-compose.yml
version: '3'
services:
  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"

  node-exporter:
    image: prom/node-exporter:latest
    ports:
      - "9100:9100"

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin

prometheus.yml(基本設定)

global:
  scrape_interval: 15s     # 15秒ごとにスクレイピング
  evaluation_interval: 15s # ルール評価間隔

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node'
    static_configs:
      - targets: ['node-exporter:9100']

よく使うPromQLクエリ

# CPU使用率(%)
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

# メモリ使用率(%)
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100

# HTTPリクエストレート(5分あたり)
rate(http_requests_total[5m])

# 5xxエラーレート(サービス別)
sum(rate(http_requests_total{status=~"5.."}[5m])) by (service)

# 95パーセンタイルのレイテンシ
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))

アラートルールの設定

# alert_rules.yml
groups:
  - name: example
    rules:
      - alert: HighCPUUsage
        expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "CPU使用率が80%を超えています"
          description: "インスタンス {{ $labels.instance }} のCPU使用率が {{ $value }}% です"

よくある詰まりポイント

Q. Prometheusのターゲットが DOWN になっている

A. Prometheusのステータスページ(http://localhost:9090/targets)でエラー詳細を確認してください。よくある原因は「対象サービスが起動していない」「ポートが間違っている」「ファイアウォールでブロックされている」の3つです。curl http://ターゲットホスト:9100/metrics でPrometheus外からメトリクスが取得できるか確認してみましょう。

Q. PromQLで no data になって何も表示されない

A. メトリクス名が正確か確認してください。PrometheusのUIで /graph にアクセスして、メトリクス名の一部を入力すると補完候補が出ます。rate() を使う場合は [5m] の時間範囲がスクレイピング間隔の2倍以上必要(例: 15秒間隔なら最低 [30s] 以上)なので注意してください。

Q. Grafanaでデータソースに接続できない

A. Grafana UIから「Configuration」→「Data Sources」→「Add data source」→「Prometheus」を選んで、URLに http://prometheus:9090(Docker Composeなら)を設定してください。localhostではなくサービス名で参照するのがDocker環境のポイントです。「Save & Test」でボタンが緑になれば成功です。

ひよこ ひよこ

Prometheusって何をするツールなの?

ペンギン先生 ペンギン先生

Prometheusはシステムやアプリケーションの「メトリクス」(数値データ)を収集して保存する監視システムだよ。CPUやメモリの使用率、HTTPリクエスト数、エラー率、レイテンシなどを時系列で記録して、問題が起きたときにアラートを飛ばせるんだ。元々Googleの内部システム「Borgmon」にインスパイアされてSoundCloudが開発して、今はCNCFのプロジェクトになっているよ。

ひよこ ひよこ

プル型ってどういう意味?プッシュ型と何が違うの?

ペンギン先生 ペンギン先生

プル型はPrometheus側が定期的に各サーバーに「データ取りに行く」方式、プッシュ型はサーバー側が監視システムにデータを「送りつける」方式だよ。Prometheusデフォルト15秒間隔でスクレイピング(データ収集)するんだ。プル型のメリットは、対象が落ちていてもPrometheus側でわかること、設定が一箇所にまとまること。Pushgatewayというコンポーネントを使えばバッチジョブからのプッシュも受け付けられるよ。

ひよこ ひよこ

メトリクスの種類って何があるの?

ペンギン先生 ペンギン先生

4種類あるよ。Counter(単調増加する累積値。HTTPリクエスト総数など)、Gauge(上下する現在値。メモリ使用量など)、Histogram(レイテンシの分布をバケットで集計)、Summary(パーセンタイルを事前計算)。PromQLでは `rate(http_requests_total[5m])` のように「5分あたりの増加率」を計算することが多いよ。

ひよこ ひよこ

PromQLって難しいの?

ペンギン先生 ペンギン先生

基本は慣れると直感的だよ。メトリクス名をそのまま書くと現在値が返ってきて、`{}` でラベルを絞り込み、`[5m]` で時間範囲を指定、`rate()` や `sum()` などの関数で集計するという構造だよ。例えば `sum(rate(http_requests_total{status=~"5.."}[5m])) by (service)` でサービス別の5xxエラーレートが取れるよ。最初は公式のPlaygroundや Grafana Exploreで試すのが楽しいよ。

ひよこ ひよこ

Grafanaって何?Prometheusだけじゃダメなの?

ペンギン先生 ペンギン先生

Prometheus自体にも簡単なグラフ表示機能はあるけど、Grafanaは本格的なダッシュボードツールだよ。折れ線グラフ・棒グラフ・ゲージなど豊富な可視化オプションがあって、複数のデータソース(Prometheus, Loki, Elasticsearch等)を1つのダッシュボードに混在させられるんだ。grafana.comにコミュニティが作ったダッシュボードが大量に公開されていて、IDを入力するだけでインポートできるから、最初から本格的なダッシュボードが作れるよ。

ひよこ ひよこ

アラートはどうやって設定するの?

ペンギン先生 ペンギン先生

Prometheusにアラートルールを書いて、Alertmanagerというコンポーネント通知先を管理するよ。ルールは `ALERT エラー率高騰 IF rate(errors[5m]) > 0.05 FOR 2m LABELS {severity="critical"}` みたいな形で書くんだ。Alertmanagerはアラートの重複排除・グルーピング・抑制(夜間メンテ中は通知しないなど)ができて、SlackやPagerDutyへの通知も設定できるよ。

ひよこ ひよこ

Kubernetesとの相性はどうなの?

ペンギン先生 ペンギン先生

Prometheusはkube-prometheus-stackというHelm chartで一発セットアップできて、Kubernetes環境との親和性がとても高いよ。kube-state-metricsでPodやDeploymentの状態をメトリクス化、node-exporterで各ノードのシステムメトリクスを収集、Grafanaダッシュボードも自動でセットアップされるんだ。ServiceMonitorというCRD監視対象を宣言的に管理できるのがKubernetes時代のPrometheusらしい使い方だよ。

次に学ぶなら