PrometheusとGrafanaで作る監視基盤の始め方

インフラ・クラウド

サーバー・アプリケーションの監視基盤として広く使われるのが、PrometheusとGrafanaの組み合わせです。Prometheusでメトリクスを収集し、Grafanaで可視化するという王道スタックです。本記事では、両者の基本と監視基盤構築の始め方を解説します。

役割分担

  • Prometheus:メトリクスの収集・保存・クエリ(PromQL)・アラート
  • Grafana:ダッシュボードによる可視化(複数データソースに対応)

Prometheusの動作モデル

Prometheusは「pull型」で、定期的に監視対象(exporter)から/metricsエンドポイントを取得します。サービスディスカバリ機能でKubernetes・Consul・EC2などを自動検出できます。

主な構成要素

  • Prometheus Server:メイン本体
  • Exporter:監視対象が提供するメトリクスエンドポイント(node_exporter / blackbox_exporter等)
  • Pushgateway:バッチジョブなどpush型に必要な場合に使用
  • Alertmanager:アラート通知(Slack / PagerDuty等へ)

Docker Composeでのお試し構築

services:
  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    ports: ["9090:9090"]
  grafana:
    image: grafana/grafana:latest
    ports: ["3000:3000"]
    environment:
      GF_SECURITY_ADMIN_PASSWORD: admin

prometheus.yml の最小例

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['node-exporter:9100']
  - job_name: 'app'
    static_configs:
      - targets: ['app:8080']

PromQLで知っておくべき関数

# CPU使用率(過去5分平均)
rate(node_cpu_seconds_total[5m])

# リクエストレート
rate(http_requests_total[1m])

# エラー率
sum(rate(http_requests_total{status=~"5.."}[5m]))
  / sum(rate(http_requests_total[5m]))

Grafanaダッシュボード

  • データソースにPrometheusを追加
  • 公式のNode Exporter Full等を import IDで取り込む
  • パネルごとにPromQLを記述
  • 変数(Variables)で動的フィルタ可能

運用Tips

  • 長期保存にはThanos / Mimir / VictoriaMetricsを検討
  • kube-prometheus-stackでK8sの監視一式が揃う
  • アラートは多発しすぎない閾値設計が大切
  • SLO/SLIの定義と一緒に運用するのがベスト

まとめ

Prometheus + Grafanaは、OSSベースで構築できる監視基盤のデファクトです。Exporterを増やすだけで多様な対象を取り込め、可視化はGrafanaの豊富なテンプレートで一気に整います。本番運用ではアラート設計とSLOの運用が成功の鍵になります。