Prometheusで始めるサーバー監視入門

Prometheusで始めるサーバー監視入門:設定から運用まで完全ガイド
サーバー監視をゼロから始めるなら、Prometheusを選ぶべきです。リアルタイムなメトリクス収集と柔軟なアラート設定により、システムの異常を即座に検知できます。本記事では、Prometheusの導入から基本設定、Grafanaとの連携、実践的な運用方法までを網羅的に解説します。この記事を読み終える頃には、あなたのサーバー環境にPrometheusを導入し、監視体制を構築できるようになるでしょう。
目次
- Prometheusとは何か?メリットと特徴を理解する
- Prometheusのインストールと初期設定
- メトリクスの収集方法:Exporterの活用
- アラート設定:異常検知と通知
- Grafanaとの連携:ダッシュボードの作成
- 実践的な運用:高度な設定とトラブルシューティング
- Prometheus運用のベストプラクティス
- Prometheusに関するよくある質問
- まとめ:Prometheusで監視体制を構築しよう
Prometheusとは何か?メリットと特徴を理解する
Prometheusは、オープンソースの監視システムおよび時系列データベースです。2012年にSoundCloudで開発され、2016年にCNCF(Cloud Native Computing Foundation)の卒業プロジェクトとして採択されました。現在では、Kubernetesをはじめとするクラウドネイティブ環境の監視において、デファクトスタンダードとなっています。
Prometheusの最大の特徴は、リアルタイムなメトリクス収集と強力なクエリ言語(PromQL)です。従来の監視ツールと比較して、以下のようなメリットがあります。
| 機能 | Prometheus | 従来の監視ツール(例:Zabbix、Nagios) |
|---|---|---|
| データ収集モデル | Pull型(プル型) | Push型(プッシュ型) |
| クエリ言語 | PromQL(強力な時系列処理) | 制限されたクエリ機能 |
| アラート機能 | 柔軟なアラートルール | 固定的なアラート条件 |
| データ保持 | 時系列データベース内蔵 | 外部データベース連携が必要 |
| 拡張性 | Exporterによる多様なメトリクス収集 | プラグイン開発が必要 |
Prometheusの主な用途は以下の通りです。
- サーバーやコンテナのリソース監視(CPU、メモリ、ディスク、ネットワーク)
- アプリケーションのパフォーマンス監視(レスポンスタイム、エラー率)
- カスタムメトリクスの収集と分析
- 異常検知とアラート通知
- 長期的なデータ分析とトレンド把握
特に、クラウドネイティブ環境では、PrometheusとGrafanaの組み合わせが一般的です。Grafanaはダッシュボード機能に優れており、Prometheusから収集したデータを視覚的に分かりやすく表示できます。
Prometheusのインストールと初期設定
Prometheusを導入するには、主に2つの方法があります。1つは直接インストールする方法、もう1つはDockerコンテナとして実行する方法です。ここでは、Linux環境とDocker環境それぞれでのインストール手順を解説します。
Linux環境へのインストール
Linux(Ubuntu/Debian)にPrometheusをインストールする手順は以下の通りです。
- 前提条件の確認
- Linux OS(Ubuntu 20.04 LTS以上、CentOS 7/8、RHEL 7/8推奨)
- root権限またはsudo権限
- インターネット接続
- Prometheusのダウンロード
公式サイトから最新版のPrometheusをダウンロードします。
# 最新版のPrometheusを確認(2024年6月現在) wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz # ダウンロードしたファイルを展開 tar xvfz prometheus-2.47.0.linux-amd64.tar.gz # ディレクトリに移動 cd prometheus-2.47.0.linux-amd64 - Prometheusの実行
Prometheusを起動します。
# 実行(デフォルトポート9090で起動) ./prometheus --config.file=prometheus.ymlブラウザで
http://localhost:9090にアクセスすると、PrometheusのWeb UIが表示されます。 - サービスとして登録(任意)
Prometheusをサービスとして登録し、システム起動時に自動起動させる方法です。
# systemdサービスファイルを作成 sudo nano /etc/systemd/system/prometheus.service # 以下の内容を記述 [Unit] Description=Prometheus Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/usr/local/bin/prometheus \ --config.file=/etc/prometheus/prometheus.yml \ --storage.tsdb.path=/var/lib/prometheus \ --web.console.templates=/usr/share/prometheus/consoles \ --web.console.libraries=/usr/share/prometheus/console_libraries Restart=always [Install] WantedBy=multi-user.target # サービスを有効化 sudo systemctl daemon-reload sudo systemctl enable prometheus sudo systemctl start prometheus
Dockerを使ったインストール
Docker環境でPrometheusを実行する方法は、以下の通りです。
- Dockerイメージの取得
docker pull prom/prometheus
- 設定ファイルの準備
Prometheusの設定ファイル(prometheus.yml)を作成します。
mkdir -p /path/to/prometheus/config cd /path/to/prometheus/config # prometheus.ymlを作成 nano prometheus.yml以下は最小構成の例です。
global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - コンテナの起動
docker run -d \ --name=prometheus \ -p 9090:9090 \ -v /path/to/prometheus/config/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus - 動作確認
ブラウザで
http://localhost:9090にアクセスし、PrometheusのWeb UIが表示されることを確認します。
基本的な設定ファイルの書き方
Prometheusの設定は、YAML形式の prometheus.yml ファイルで行います。主な設定項目は以下の通りです。
| 設定項目 | 説明 | デフォルト値 |
|---|---|---|
| global.scrape_interval | メトリクス収集の間隔 | 15s |
| global.evaluation_interval | アラートルールの評価間隔 | 15s |
| scrape_configs | メトリクス収集先の設定 | – |
| alerting.alertmanager_config | Alertmanagerの設定 | – |
| rule_files | アラートルールファイルのパス | – |
以下は、典型的な prometheus.yml の例です。
global: scrape_interval: 15s evaluation_interval: 15s scrape_timeout: 10sAlertmanagerの設定
alerting: alertmanagers: - static_configs: - targets: # Alertmanagerのアドレスを指定(例:localhost:9093)アラートルールの読み込み
rule_files: - "alert.rules"メトリクス収集先の設定
scrape_configs: # Prometheus自身のメトリクスを収集 - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] # Node Exporterのメトリクスを収集 - job_name: 'node_exporter' static_configs: - targets: ['localhost:9100'] # 別のサーバーのメトリクスを収集 - job_name: 'web_server' static_configs: - targets: ['192.168.1.100:9100']
設定ファイルの変更後は、Prometheusを再起動するか、設定ファイルを再読み込みします。
# 設定ファイルを再読み込み(Web UIからも可能) kill -HUP <prometheus_pid>
メトリクスの収集方法:Exporterの活用
Prometheusは、主に「Pull型」の監視モデルを採用しています。これは、Prometheusが定期的にターゲット(監視対象)からメトリクスを取得する仕組みです。ターゲットは、Prometheusが直接メトリクスを取得できるように、HTTPエンドポイントを提供する必要があります。
Prometheusが直接メトリクスを取得できないシステム(例:Linuxサーバーのシステムメトリクス)については、専用のエクスポーター(Exporter)を使用します。エクスポーターは、ターゲットシステムからメトリクスを収集し、Prometheusが取得できるHTTPエンドポイントを提供します。
Node Exporterでサーバーの基本メトリクスを取得
Node Exporterは、Linuxサーバーのシステムメトリクス(CPU、メモリ、ディスク、ネットワークなど)を収集するためのエクスポーターです。Node Exporterを使用することで、Prometheusでサーバーの基本的な監視が可能になります。
Node Exporterのインストールと実行
- Node Exporterのダウンロード
公式サイトから最新版のNode Exporterをダウンロードします。
# 最新版のNode Exporterを確認(2024年6月現在) wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz # ダウンロードしたファイルを展開 tar xvfz node_exporter-1.6.1.linux-amd64.tar.gz # ディレクトリに移動 cd node_exporter-1.6.1.linux-amd64 - Node Exporterの実行
Node Exporterを起動します。
# 実行(デフォルトポート9100で起動) ./node_exporterブラウザで
http://localhost:9100/metricsにアクセスすると、収集されたメトリクスが表示されます。 - Prometheusの設定に追加
Prometheusの
prometheus.ymlにNode Exporterを追加します。scrape_configs: - job_name: 'node_exporter' static_configs: - targets: ['localhost:9100'] - サービスとして登録(任意)
Node Exporterをサービスとして登録し、システム起動時に自動起動させる方法です。
# systemdサービスファイルを作成 sudo nano /etc/systemd/system/node_exporter.service # 以下の内容を記述 [Unit] Description=Node Exporter Wants=network-online.target After=network-online.target [Service] User=node_exporter Group=node_exporter Type=simple ExecStart=/usr/local/bin/node_exporter Restart=always [Install] WantedBy=multi-user.target # サービスを有効化 sudo systemctl daemon-reload sudo systemctl enable node_exporter sudo systemctl start node_exporter
Node Exporterで収集できる主なメトリクス
Node Exporterで収集できるメトリクスは、以下の通りです。
| カテゴリ | メトリクス例 | 説明 |
|---|---|---|
| CPU | node_cpu_seconds_total | CPUの使用時間(秒単位) |
| node_cpu_guest_seconds_total | ゲストOSのCPU使用時間 | |
| node_load1 | 1分間のロードアベレージ | |
| node_load5 | 5分間のロードアベレージ | |
| node_load15 | 15分間のロードアベレージ | |
| メモリ | node_memory_MemTotal_bytes | 総メモリ量(バイト単位) |
| node_memory_MemFree_bytes | 空きメモリ量 | |
| node_memory_Buffers_bytes | バッファメモリ量 | |
| node_memory_Cached_bytes | キャッシュメモリ量 | |
| ディスク | node_filesystem_size_bytes | ファイルシステムの総容量 |
| node_filesystem_free_bytes | ファイルシステムの空き容量 | |
| node_filesystem_avail_bytes | ファイルシステムの利用可能容量 | |
| ネットワーク | node_network_receive_bytes_total | 受信バイト数 |
| node_network_transmit_bytes_total | 送信バイト数 | |
| node_network_up | ネットワークインターフェースの状態(1=up, 0=down) |
カスタムメトリクスの収集
Prometheusは、カスタムメトリクスの収集にも対応しています。カスタムメトリクスを収集するには、以下の方法があります。
- Push Gatewayの利用:一時的なジョブ(例:バッチ処理)からメトリクスをPush Gatewayに送信し、PrometheusがPullします。
- カスタムExporterの開発:独自のExporterを作成し、PrometheusがPullできるHTTPエンドポイントを提供します。
- アプリケーション内蔵のPrometheusクライアント:アプリケーションにPrometheusクライアントライブラリを組み込み、メトリクスを直接Prometheusに送信します。
以下は、PythonでカスタムExporterを作成する例です。
from prometheus_client import start_http_server, Counter, Gauge import random import timeメトリクスの定義
REQUEST_COUNT = Counter('http_requests_total', 'Total HTTP Requests') ERROR_COUNT = Counter('http_errors_total', 'Total HTTP Errors') RESPONSE_TIME = Gauge('http_response_time_seconds', 'HTTP Response Time') def handle_request(): REQUEST_COUNT.inc() try: # 何らかの処理 time.sleep(random.random()) RESPONSE_TIME.set(random.random()) except Exception: ERROR_COUNT.inc() raise if __name__ == '__main__': # Exporterをポート8000で起動 start_http_server(8000) while True: handle_request() time.sleep(1)
このExporterを実行すると、Prometheusは http://localhost:8000/metrics からメトリクスを取得できます。
アラート設定:異常検知と通知
Prometheusの最大の特徴の1つは、柔軟なアラート機能です。Prometheusは、定義したルールに基づいてアラートを生成し、Alertmanagerに送信します。Alertmanagerは、アラートをグループ化し、適切な通知先(メール、Slack、PagerDutyなど)に送信します。
アラートルールの作成
アラートルールは、Prometheusの prometheus.yml または別ファイル(例:alert.rules)で定義します。アラートルールは、PromQLクエリを使用して条件を指定します。
以下は、典型的なアラートルールの例です。
groups:
- name: example
rules:
# CPU使用率が90%以上の場合にアラート
- alert: HighCPUUsage
expr: (100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)) > 90
for: 5m
labels:
severity: warning
annotations:
summary: "High CPU usage on {{ $labels.instance }}"
description: "CPU usage is {{ $value }}% for more than 5 minutes."
# メモリ使用率が95%以上の場合にアラート
- alert: HighMemoryUsage
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 95
for: 5m
labels:
severity: critical
annotations:
summary: "High memory usage on {{ $labels.instance }}"
description: "Memory usage is {{ $value }}% for more than 5 minutes."
# ディスク使用率が90%以上の場合にアラート
- alert: HighDiskUsage
expr: (node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100 > 90
for: 10m
labels:
severity: warning
annotations:
summary: "High disk usage on {{ $labels.instance }}"
description: "Disk usage is {{ $value }}% for more than 10 minutes."アラートルールの主な要素は以下の通りです。
| 要素 | 説明 | 例 |
|---|---|---|
| alert | アラート名 | HighCPUUsage |
| expr | PromQLクエリ | (100 – (avg by(instance) (rate(node_cpu_seconds_total{mode=”idle”}[5m])) * 100)) > 90 |
| for | アラートが継続する時間(アラートを発火させるまでの猶予時間) | 5m |
| labels | アラートに付与するラベル | severity: warning |
| annotations | アラートに付与する注釈(通知内容) | summary: “High CPU usage on {{ $labels.instance }}” |
アラートルールを定義したら、Prometheusの prometheus.yml にルールファイルを読み込む設定を追加します。
rule_files: - "alert.rules"
設定を反映するには、Prometheusを再起動するか、設定ファイルを再読み込みします。
Alertmanagerで通知を管理
Alertmanagerは、Prometheusから送信されたアラートを処理し、適切な通知先に送信します。Alertmanagerの主な機能は以下の通りです。
- アラートのグループ化と抑制
- アラートの重複排除
- 通知先(メール、Slack、PagerDutyなど)への送信
- 静寂期間(Silence)の設定
Alertmanagerのインストールと実行
- Alertmanagerのダウンロード
公式サイトから最新版のAlertmanagerをダウンロードします。
# 最新版のAlertmanagerを確認(2024年6月現在) wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz # ダウンロードしたファイルを展開 tar xvfz alertmanager-0.26.0.linux-amd64.tar.gz # ディレクトリに移動 cd alertmanager-0.26.0.linux-amd64 - Alertmanagerの設定
Alertmanagerの設定ファイル(
alertmanager.yml)を作成します。global: resolve_timeout: 5m route: group_by: ['alertname'] group_wait: 10s group_interval: 5m repeat_interval: 3h receiver: 'webhook' receivers: - name: 'webhook' webhook_configs: - url: 'http://alertmanager-webhook:5001/'
この設定では、すべてのアラートを1つのグループにまとめ、10秒待ってから通知します。通知先はWebhookとして設定されています。
- Alertmanagerの実行
Alertmanagerを起動します。
# 実行(デフォルトポート9093で起動) ./alertmanager --config.file=alertmanager.ymlブラウザで
http://localhost:9093にアクセスすると、AlertmanagerのWeb UIが表示されます。
AlertmanagerとPrometheusの連携
PrometheusとAlertmanagerを連携させるには、Prometheusの prometheus.yml にAlertmanagerの設定を追加します。
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093設定を反映するには、Prometheusを再起動します。
通知先の設定例
Alertmanagerは、さまざまな通知先をサポートしています。以下は、代表的な通知先の設定例です。
- メール:
receivers: - name: 'email' email_configs: - to: 'admin@example.com' from: 'prometheus@example.com' smarthost: 'smtp.example.com:587' auth_username: 'user@example.com' auth_identity: 'user@example.com' auth_password: 'password' - Slack:
receivers: - name: 'slack' slack_configs: - api_url: 'https://hooks.slack.com/services/XXX/YYY/ZZZ' channel: '#alerts' text: '{{ .CommonAnnotations.summary }}' - PagerDuty:
receivers: - name: 'pagerduty' pagerduty_configs: - service_key: 'your-service-key'
Grafanaとの連携:ダッシュボードの作成
Grafanaは、オープンソースのデータ可視化ツールです。Prometheusと連携することで、収集したメトリクスをリッチなダッシュボードで表示できます。Grafanaは、Prometheusの時系列データを扱うのに最適化されており、直感的な操作でダッシュボードを作成できます。
Grafanaのインストー…
Grafanaのインストール
Grafanaをインストールする方法は、以下の通りです。
- Grafanaのダウンロード
公式サイトから最新版のGrafanaをダウンロードします。
# Ubuntu/Debianの場合 sudo apt-get install -y apt-transport-https sudo apt-get install -y software-properties-common wget wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list sudo apt-get update sudo apt-get install grafana # 起動と自動起動の有効化 sudo systemctl start grafana-server sudo systemctl enable grafana-server - Grafanaにアクセス
ブラウザで
http://localhost:3000にアクセスします。初期ユーザー名はadmin、パスワードはadminです。
GrafanaとPrometheusの連携
GrafanaでPrometheusをデータソースとして追加します。
- データソースの追加
GrafanaのWeb UIで、左側のメニューから「Configuration」→「Data Sources」を選択します。
「Add data source」をクリックし、Prometheusを選択します。
以下の設定を行います。
- Name: Prometheus
- URL: http://localhost:9090(Prometheusのアドレス)
- Access: Server (default)
「Save & Test」をクリックして、接続をテストします。
ダッシュボードの作成
Grafanaでダッシュボードを作成する手順は以下の通りです。
- 【編集・制作ポリシー】
本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。




