Linuxサーバーのリソース監視とパフォーマンス可視化を実現するなら、PrometheusとGrafanaの組み合わせが最適解です。この記事では、実際の運用現場で即戦力となる監視環境をゼロから構築する具体的な手順を解説します。

目次

Linux監視の基礎知識

なぜPrometheusと…

監視対象の選定とメトリクス設計

Prometheusの導入…

サーバー要件とインストール手順

基本設定と起動確認

Exporterを活用した…

Grafanaの導入とダッ…

Grafanaのインストー…

Prometheusデータ…

実践的なダッシュボード設計

運用に役立つ高度な設定

アラートルールの設定と通知

長期データ保存のためのスト…

セキュリティ設定のベストプ…

まとめと次のステップ

Linux監視の基礎知識

なぜPrometheusと…

Linuxサーバーの監視環境を構築する際、PrometheusとGrafanaの組み合わせは圧倒的な柔軟性と拡張性を提供します。Prometheusは時系列データに特化した監視システムで、Grafanaはそのデータを直感的なダッシュボードで可視化するツールです。この組み合わせにより、システム管理者はリアルタイムのパフォーマンス監視から長期的なトレンド分析まで、一貫した監視フローを実現できます。

具体的なメリットとして、以下の点が挙げられます。

  • 軽量で高性能:PrometheusはGo言語で実装されており、単一のバイナリで動作します。メモリ使用量が少なく、高負荷環境でも安定稼働します。
  • 多言語対応のExporter:Node Exporterをはじめとする多数のExporterが提供されており、Linuxシステムのあらゆるメトリクスを収集できます。
  • 強力なクエリ言語:PromQLを使用して、複雑な条件のメトリクス集計やアラート条件を柔軟に定義できます。
  • 直感的な可視化:Grafanaの豊富なグラフ表現により、監視データをわかりやすく表示できます。
  • アラート機能:Prometheusのアラートマネージャーと連携して、異常発生時に即座に通知を受け取れます。

実際の運用現場では、PrometheusとGrafanaの組み合わせがデファクトスタンダードとなっており、多くの企業で採用されています。例えば、GitLabやKubernetesなどの大規模システムでもこの組み合わせが活用されています。

監視対象の選定とメトリクス設計

Linuxサーバーの監視対象を選定する際は、システムの用途や重要度に応じて優先順位を付けることが重要です。一般的なLinuxサーバーで監視すべき主要なメトリクスは以下の通りです。

カテゴリ監視項目重要度説明
システムリソースCPU使用率システム全体の負荷状況を示す。1分間の平均値を監視する。
メモリ使用率物理メモリとスワップの使用状況を監視。メモリリークの検出に有効。
ディスクI/Oディスクの読み書き速度と待ち時間を監視。ボトルネックの特定に役立つ。
ネットワークトラフィック送受信データ量とエラー率を監視。帯域幅の逼迫や不正アクセスの検出に有効。
プロセスプロセス数実行中のプロセス数を監視。リソース枯渇の予兆を検出。
特定プロセスのCPU/メモリ使用率重要なサービスプロセスのリソース使用状況を個別に監視。
プロセスの応答時間サービスのレスポンスタイムを監視。パフォーマンス低下の早期発見に有効。
システムステータスシステムログエラーsyslogやjournalctlからエラーメッセージを抽出し監視。
システム時刻の同期状態NTPサービスの状態を監視し、時刻同期の異常を検出。

メトリクス設計においては、以下のポイントに注意してください。

  1. 粒度の設定:監視間隔は用途に応じて調整します。一般的なシステムでは15秒から1分間隔が推奨されます。
  2. 保持期間の決定:短期的なトラブルシューティングには直近1週間のデータが、長期的なトレンド分析には1年以上のデータが必要です。
  3. アラート閾値の設定:CPU使用率90%以上でアラートを発報するなど、適切な閾値を設定します。
  4. ラベルの活用:Prometheusのラベル機能を活用して、サーバー名、サービス名、環境などでメトリクスを分類します。

具体的な設計例として、Webサーバーを監視する場合のメトリクス構成を紹介します。

  • システムリソース:CPU、メモリ、ディスクI/O、ネットワークトラフィック
  • Webサーバープロセス:Nginx/Apacheのプロセス数、リクエスト処理数、レスポンスタイム
  • アプリケーション:アプリケーションログのエラー数、データベース接続数
  • セキュリティ:不正なアクセス試行数、ファイアウォール拒否数

Prometheusの導入…

サーバー要件とインストール手順

Prometheusを導入する際のサーバー要件は、監視対象の規模によって異なります。一般的な目安は以下の通りです。

監視対象数CPUコアメモリストレージ推奨OS
10台以下2コア以上4GB以上50GB以上(SSD推奨)Ubuntu 22.04 LTS / CentOS 7/8
10〜100台4コア以上8GB以上100GB以上(SSD推奨)Ubuntu 22.04 LTS / RHEL 8
100台以上8コア以上16GB以上200GB以上(NVMe SSD推奨)Ubuntu 22.04 LTS / RHEL 9

Prometheusのインストール手順は以下の通りです。本記事ではUbuntu 22.04 LTSを例に解説します。

  1. Prometheusユーザーの作成
    sudo useradd --no-create-home --shell /bin/false prometheus
    sudo mkdir /etc/prometheus
    sudo mkdir /var/lib/prometheus
    sudo chown prometheus:prometheus /etc/prometheus
    sudo chown prometheus:prometheus /var/lib/prometheus
  2. Prometheusバイナリのダウンロードとインストール

    最新版のPrometheusを公式サイトからダウンロードします。

    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
    sudo cp prometheus-2.47.0.linux-amd64/prometheus /usr/local/bin/
    sudo cp prometheus-2.47.0.linux-amd64/promtool /usr/local/bin/
    sudo chown prometheus:prometheus /usr/local/bin/prometheus
    sudo chown prometheus:prometheus /usr/local/bin/promtool
  3. 設定ファイルの作成

    Prometheusの設定ファイル(prometheus.yml)を作成します。

    sudo nano /etc/prometheus/prometheus.yml

    以下は基本的な設定例です。

    global:
      scrape_interval: 15s
      evaluation_interval: 15s
    
    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
          - targets: ['localhost:9090']
  4. サービスファイルの作成

    Prometheusをサービスとして登録します。

    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=/etc/prometheus/consoles \
        --web.console.libraries=/etc/prometheus/console_libraries
    
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
  5. サービスの起動と有効化
    sudo systemctl daemon-reload
    sudo systemctl start prometheus
    sudo systemctl enable prometheus
  6. ファイアウォールの設定

    PrometheusのWebインターフェース(ポート9090)へのアクセスを許可します。

    sudo ufw allow 9090/tcp
  7. 動作確認

    ブラウザで http://<サーバーIP>:9090 にアクセスし、PrometheusのWebインターフェースが表示されることを確認します。

インストールが完了したら、PrometheusのWebインターフェースで以下の点を確認してください。

  • Status → Targets:監視対象が正常に登録されていること
  • Status → Configuration:設定ファイルが正しく読み込まれていること
  • Status → Runtime & Build Information:バージョン情報が正しく表示されること

基本設定と起動確認

Prometheusの基本設定には、以下の重要なパラメータがあります。

パラメータ説明推奨値
global.scrape_intervalメトリクス収集の間隔15s(デフォルト)
global.evaluation_intervalルール評価の間隔15s(デフォルト)
global.scrape_timeoutメトリクス収集のタイムアウト10s
storage.tsdb.retention.timeデータ保持期間30d(30日間)
storage.tsdb.path時系列データベースの保存先/var/lib/prometheus
web.listen-addressWebインターフェースのリスニングアドレス:9090

これらのパラメータは、コマンドライン引数または設定ファイルで指定できます。例えば、コマンドラインで指定する場合は以下のようになります。

prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.retention.time=30d \
  --web.listen-address=":9090"

Prometheusの起動確認方法は以下の通りです。

  1. プロセスの確認
    ps aux | grep prometheus

    Prometheusのプロセスが実行されていることを確認します。

  2. ログの確認
    journalctl -u prometheus -f

    Prometheusのログをリアルタイムで確認し、エラーが発生していないことを確認します。

  3. Webインターフェースの確認

    ブラウザで http://<サーバーIP>:9090 にアクセスし、PrometheusのWebインターフェースが正常に動作していることを確認します。

  4. メトリクスの取得確認

    PrometheusのWebインターフェースで “Graph” タブを開き、以下のクエリを実行してメトリクスが取得できることを確認します。

    up{job="prometheus"}

    このクエリは、Prometheus自身のステータスを示すメトリクスで、値が1であれば正常に動作しています。

Prometheusの基本的な動作確認が完了したら、次は監視対象を追加する設定を行います。

Exporterを活用した…

Prometheusは直接Linuxシステムのメトリクスを収集する機能を持っていません。そのため、Prometheus Exporterと呼ばれるエージェントソフトウェアを使用して、システムメトリクスを収集します。Linuxシステムの監視に最適なExporterはNode Exporterです。

Node Exporterの特徴は以下の通りです。

  • LinuxシステムのCPU、メモリ、ディスク、ネットワークなどの主要なメトリクスを収集
  • 軽量で動作負荷が少ない
  • 多数のメトリクスを提供(300以上のメトリクス)
  • Prometheusとの互換性が高い

Node Exporterのインストール手順は以下の通りです。

  1. Node Exporterのダウンロード

    最新版のNode Exporterを公式サイトからダウンロードします。

    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
    sudo cp node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin/
    sudo chown root:root /usr/local/bin/node_exporter
  2. Node Exporterのサービスファイル作成
    sudo nano /etc/systemd/system/node_exporter.service

    以下の内容を記述します。

    [Unit]
    Description=Node Exporter
    Wants=network-online.target
    After=network-online.target
    
    [Service]
    User=root
    Group=root
    Type=simple
    ExecStart=/usr/local/bin/node_exporter
    
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
  3. Node Exporterの起動と有効化
    sudo systemctl daemon-reload
    sudo systemctl start node_exporter
    sudo systemctl enable node_exporter
  4. ファイアウォールの設定

    Node Exporterのポート(9100)へのアクセスを許可します。

    sudo ufw allow 9100/tcp
  5. 動作確認

    ブラウザで http://<サーバーIP>:9100/metrics にアクセスし、メトリクスが取得できることを確認します。

Node Exporterが正常に動作したら、Prometheusの設定ファイルにNode Exporterを監視対象として追加します。

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node_exporter'
    static_configs:
      - targets: [':9100']

設定ファイルを更新したら、Prometheusを再起動します。

sudo systemctl restart prometheus

PrometheusのWebインターフェースで “Targets” を確認し、node_exporterのステータスが “UP” になっていることを確認します。

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_memory_SwapTotal_bytes総スワップ量
ディスクnode_disk_io_time_seconds_totalディスクI/O時間(秒単位)
node_disk_read_bytes_totalディスク読み込みバイト数
node_disk_written_bytes_totalディスク書き込みバイト数
node_filesystem_free_bytesファイルシステムの空き容量
ネットワークnode_network_receive_bytes_totalネットワーク受信バイト数
node_network_transmit_bytes_totalネットワーク送信バイト数
node_network_receive_errs_totalネットワーク受信エラー数
node_network_transmit_drop_totalネットワーク送信ドロップ数

Grafanaの導入とダッ…

Grafanaのインストー…

Grafanaは、Prometheusを含む様々なデータソースからのデータを可視化するためのオープンソースツールです。Grafanaを使用することで、監視データを直感的なダッシュボードで表示し、異常検知やパフォーマンス分析を効率的に行うことができます。

Grafanaの主な特徴は以下の通りです。

  • 複数のデータソースに対応(Prometheus、InfluxDB、MySQL、Elasticsearchなど)
  • 豊富なグラフ表現(時系列、ゲージ、ヒートマップ、表形式など)
  • ダッシュボードの共有と再利用が容易
  • アラート機能による異常検知
  • コミュニティによる豊富なダッシュボードテンプレート

Grafanaのインストール手順は以下の通りです。本記事ではUbuntu 22.04 LTSを例に解説します。

  1. 依存パッケージのインストール
    sudo apt-get update
    sudo apt-get install -y apt-transport-https
    sudo apt-get install -y software-properties-common wget
  2. Grafanaリポジトリの追加
    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
  3. Grafanaのインストール
    sudo apt-get update
    sudo apt-get install -y grafana
  4. Grafanaサービスの起動と有効化
    sudo systemctl daemon-reload
    sudo systemctl start grafana-server
    sudo systemctl enable grafana-server
  5. ファイアウォールの設定

    GrafanaのWebインターフェース(ポート3000)へのアクセスを許可します。

    sudo ufw allow 3000/tcp
  6. 動作確認

    ブラウザで http://<サーバーIP>:3000 にアクセスし、Grafanaのログイン画面が表示されることを確認します。

    初期ユーザー名は “admin”、初期パスワードは “admin” です。ログイン後、パスワードの変更を求められますので、新しいパスワードを設定してください。

Grafanaの初期設定が完了したら、以下の基本設定を行います。

  1. データソースの追加

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

    1. 左側メニューの “Configuration” → “Data Sources” を選択します。
    2. “Add data source” ボタンをクリックします。
    3. データソースの種類として “Prometheus” を選択します。
    4. 以下の設定を行います。
    5. 項目
      NamePrometheus
      URLhttp://localhost:9090
      AccessServer (default)
    6. “Save & Test” ボタンをクリックして、接続が成功することを確認します。
  2. ダッシュボードの作成

    新しいダッシュボードを作成します。

    1. 左側メニューの “Create” → “Dashboard” を選択します。
    2. “Add new panel” ボタンをクリックします。
    3. クエリエディタで、以下のPromQLクエリを入力します。
    4. 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)
    5. グラフの種類を “Gauge” に変更します。
    6. パネルのタイトルを “CPU Usage” に設定します。
    7. “Apply” ボタンをクリックして、ダッシュボードにパネルを追加します。

Prometheusデータ…

GrafanaとPrometheusを接続することで、Prometheusに蓄積された監視データをGrafanaで可視化できます。接続手順は以下の通りです。

  1. Grafanaへのログイン

    GrafanaのWebインターフェースにログインします。

  2. データソースの設定

    以下の手順でPrometheusをデータソースとして追加します。

    1. 左側メニューの “Configuration” → “Data Sources” を選択します。
    2. “Add data source” ボタンをクリックします。
    3. データソースの種類として “Prometheus” を選択します。
    4. 以下の設定を行います。
    5. 項目
      NamePrometheus
      URLhttp://:9090
      AccessServer (default)
      Basic Auth無効
      Scrape interval15s
    6. “Save & Test” ボタンをクリックして、接続が成功することを確認します。
    7. 接続に成功すると、”Data source connected and labels found.” というメッセージが表示されます。
  3. データソースの確認

    データソースが正しく設定されていることを確認します。

    1. 左側メニューの “Explore” を選択します。
    2. データソースとして “Prometheus” を選択します。
    3. 以下のクエリを実行して、メトリクスが取得できることを確認します。
    4. up{job="node_exporter"}
    5. クエリの実行結果が表示され、値が1であれば正常に動作しています。

PrometheusとGrafanaの接続が完了したら、以下のような基本的なダッシュボードを作成できます。

  • システムリソース(CPU、メモリ、ディスク、ネットワーク)の概要
  • プロセスごとのリソース使用状況
  • システムログのエラー監視
  • ネットワークトラフィックの可視化

実践的なダッシュボード設計

実践的なダッシュボード

【編集・制作ポリシー】
本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。
ABOUT ME
たから
サラリーマンをしながら開業して経営やってます。 今年、本業で独立・別事業を起業予定です。 ◆経験:IT講師/インフラエンジニア/PM/マネジメント/採用/運用・保守・構築・設計 ◆取得資格:CCNA/CCNP/LPIC-1/AZ-900/FE/サーティファイC言語 ◆サイドビジネス:アパレル事業/複数のWEBメディアを運営