PrometheusとGrafanaによる実践サーバー監視ダッシュボード構築
オープンソースの監視ツールPrometheusとGrafanaを使い、サーバーやアプリケーションのメトリクスを収集、可視化、アラートする実践的な方法を解説。
佐藤 裕介
大規模サービスのインフラ運用経験10年以上。Kubernetes、Terraform、CI/CDパイプライン構築を得意とし、信頼性の高いシステム基盤を提供します。
はじめに
システムの安定運用において、監視は不可欠な要素です。「システムが正常に動いているか?」「リソースは十分に足りているか?」「どこかにパフォーマンスのボトルネックはないか?」といった問いに答えるためには、システムの内部状態を継続的に計測し、可視化する必要があります。
本記事では、現代のクラウドネイティブな環境における監視のデファクトスタンダードとなっている、オープンソースのツールPrometheusとGrafanaを組み合わせ、実践的な監視ダッシュボードを構築する方法を解説します。
PrometheusとGrafanaの役割
この2つのツールは、それぞれ異なる役割を担っています。
- Prometheus: メトリクス(時系列データ)の収集、保存、検索、アラートを担当する、多機能な監視システムです。Pull型のアーキテクチャを採用しており、Prometheusサーバーが定期的に監視対象(Exporterやアプリケーション)にHTTPリクエストを送り、メトリクスを収集(スクレイプ)します。
- Grafana: 収集したデータを可視化するための、美しく高機能なダッシュボードツールです。Prometheusだけでなく、様々なデータソースに対応しており、収集したメトリクスを折れ線グラフやゲージ、ヒートマップなど、多彩な形式で表示できます。
graph TD;
subgraph targets[監視対象]
A[Node Exporter
サーバーのメトリクス]
B[Application
カスタムメトリクス]
C[Blackbox Exporter
外部監視]
end
subgraph system[監視システム]
D(Prometheus Server)
E(Alertmanager)
F(Grafana)
end
subgraph notify[通知先]
G[Slack]
H[PagerDuty]
end
subgraph users[ユーザー]
I[開発者/SRE]
end
D -- スクレイプ --> A
D -- スクレイプ --> B
D -- スクレイプ --> C
E -- アラートルール --> D
F -- データソースとしてクエリ --> D
E -- アラート通知 --> G
E -- アラート通知 --> H
I -- ダッシュボード閲覧 --> F
監視システムの構築ステップ
1. Prometheusのセットアップ
Prometheusは、Dockerコンテナとして起動するのが最も手軽です。
prometheus.yml (設定ファイル):
global:
scrape_interval: 15s # 15秒ごとにスクレイプ
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090'] # Prometheus自体を監視
- job_name: 'node_exporter'
static_configs:
- targets: ['node-exporter:9100'] # 後述するNode Exporter
この設定ファイルを用意し、DockerでPrometheusを起動します。
2. Exporterによるメトリクス収集
Prometheusは、Exporterと呼ばれるエージェントを監視対象のサーバーに配置することで、様々なシステムのメトリクスを収集します。
- Node Exporter: LinuxサーバーのCPU使用率、メモリ使用量、ディスクI/O、ネットワークトラフィックといった、基本的なOSレベルのメトリクスを収集するための標準的なExporterです。
Docker Composeを使うと、PrometheusとNode Exporterを簡単に連携させることができます。
docker-compose.yml:
version: '3.8'
services:
prometheus:
image: prom/prometheus:v2.53.1
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
node-exporter:
image: prom/node-exporter:v1.8.2
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--path.rootfs=/rootfs'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
ports:
- "9100:9100"
3. Grafanaによるダッシュボード作成
GrafanaもDockerで起動します。起動後、http://localhost:3000にアクセスし、Prometheusをデータソースとして追加します。
Grafanaの魅力の一つは、コミュニティによって作成された高品質なダッシュボードが多数公開されていることです。例えば、「Node Exporter Full」(ID: 1860) といった人気のダッシュボードをインポートするだけで、すぐに詳細なサーバー監視ダッシュボードを手に入れることができます。
4. アラートの設定
Prometheusには、Alertmanagerというコンポーネントが統合されています。Prometheusの設定ファイルにアラートルールを記述することで、「CPU使用率が5分以上90%を超えたら」といった条件で、SlackやPagerDutyに自動で通知を送ることができます。
まとめ
PrometheusとGrafanaを組み合わせることで、オープンソースでありながら、非常に強力で柔軟な監視基盤を構築することが可能です。システムのメトリクスを継続的に監視し、ダッシュボードで可視化する文化は、障害の予兆検知やパフォーマンス改善の第一歩となります。
まずはNode Exporterによる基本的なサーバー監視から始め、徐々にアプリケーション固有のカスタムメトリクスを計測するなど、監視の範囲を広げていくことをお勧めします。
著者について
佐藤 裕介
大規模サービスのインフラ運用経験10年以上。Kubernetes、Terraform、CI/CDパイプライン構築を得意とし、信頼性の高いシステム基盤を提供します。