【2026年版】Prometheusの始め方 — メトリクス監視の入門
- 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側が定期的に各サーバーに「データ取りに行く」方式、プッシュ型はサーバー側が監視システムにデータを「送りつける」方式だよ。Prometheusはデフォルト15秒間隔でスクレイピング(データ収集)するんだ。プル型のメリットは、対象が落ちていてもPrometheus側でわかること、設定が一箇所にまとまること。Pushgatewayというコンポーネントを使えばバッチジョブからのプッシュも受け付けられるよ。
メトリクスの種類って何があるの?
PromQLって難しいの?
Grafanaって何?Prometheusだけじゃダメなの?
Prometheus自体にも簡単なグラフ表示機能はあるけど、Grafanaは本格的なダッシュボードツールだよ。折れ線グラフ・棒グラフ・ゲージなど豊富な可視化オプションがあって、複数のデータソース(Prometheus, Loki, Elasticsearch等)を1つのダッシュボードに混在させられるんだ。grafana.comにコミュニティが作ったダッシュボードが大量に公開されていて、IDを入力するだけでインポートできるから、最初から本格的なダッシュボードが作れるよ。
アラートはどうやって設定するの?
Kubernetesとの相性はどうなの?
Prometheusはkube-prometheus-stackというHelm chartで一発セットアップできて、Kubernetes環境との親和性がとても高いよ。kube-state-metricsでPodやDeploymentの状態をメトリクス化、node-exporterで各ノードのシステムメトリクスを収集、Grafanaダッシュボードも自動でセットアップされるんだ。ServiceMonitorというCRDで監視対象を宣言的に管理できるのがKubernetes時代のPrometheusらしい使い方だよ。