Prometheusで始めるサーバー監視入門:設定から運用まで完全ガイド

サーバー監視をゼロから始めるなら、Prometheusを選ぶべきです。リアルタイムなメトリクス収集と柔軟なアラート設定により、システムの異常を即座に検知できます。本記事では、Prometheusの導入から基本設定、Grafanaとの連携、実践的な運用方法までを網羅的に解説します。この記事を読み終える頃には、あなたのサーバー環境に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をインストールする手順は以下の通りです。

  1. 前提条件の確認
    • Linux OS(Ubuntu 20.04 LTS以上、CentOS 7/8、RHEL 7/8推奨)
    • root権限またはsudo権限
    • インターネット接続
  2. 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
  3. Prometheusの実行

    Prometheusを起動します。

    # 実行(デフォルトポート9090で起動)
        ./prometheus --config.file=prometheus.yml

    ブラウザで http://localhost:9090 にアクセスすると、PrometheusのWeb UIが表示されます。

  4. サービスとして登録(任意)

    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を実行する方法は、以下の通りです。

  1. Dockerイメージの取得
    docker pull prom/prometheus
  2. 設定ファイルの準備

    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']
  3. コンテナの起動
    docker run -d \
          --name=prometheus \
          -p 9090:9090 \
          -v /path/to/prometheus/config/prometheus.yml:/etc/prometheus/prometheus.yml \
          prom/prometheus
  4. 動作確認

    ブラウザで http://localhost:9090 にアクセスし、PrometheusのWeb UIが表示されることを確認します。

基本的な設定ファイルの書き方

Prometheusの設定は、YAML形式の prometheus.yml ファイルで行います。主な設定項目は以下の通りです。

設定項目説明デフォルト値
global.scrape_intervalメトリクス収集の間隔15s
global.evaluation_intervalアラートルールの評価間隔15s
scrape_configsメトリクス収集先の設定
alerting.alertmanager_configAlertmanagerの設定
rule_filesアラートルールファイルのパス

以下は、典型的な prometheus.yml の例です。

global:
  scrape_interval: 15s
  evaluation_interval: 15s
  scrape_timeout: 10s

Alertmanagerの設定

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のインストールと実行

  1. 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
  2. Node Exporterの実行

    Node Exporterを起動します。

    # 実行(デフォルトポート9100で起動)
        ./node_exporter

    ブラウザで http://localhost:9100/metrics にアクセスすると、収集されたメトリクスが表示されます。

  3. Prometheusの設定に追加

    Prometheusの prometheus.yml にNode Exporterを追加します。

    scrape_configs:
      - job_name: 'node_exporter'
        static_configs:
          - targets: ['localhost:9100']
  4. サービスとして登録(任意)

    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で収集できるメトリクスは、以下の通りです。

カテゴリメトリクス例説明
CPUnode_cpu_seconds_totalCPUの使用時間(秒単位)
node_cpu_guest_seconds_totalゲストOSのCPU使用時間
node_load11分間のロードアベレージ
node_load55分間のロードアベレージ
node_load1515分間のロードアベレージ
メモリ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
exprPromQLクエリ(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のインストールと実行

  1. 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
  2. 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として設定されています。

  3. 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をインストールする方法は、以下の通りです。

  1. 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
  2. Grafanaにアクセス

    ブラウザで http://localhost:3000 にアクセスします。初期ユーザー名は admin、パスワードは admin です。

GrafanaとPrometheusの連携

GrafanaでPrometheusをデータソースとして追加します。

  1. データソースの追加

    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編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。