サーバー・アプリケーションの監視基盤として広く使われるのが、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の運用が成功の鍵になります。