サーバー監視をゼロから構築するなら、PrometheusとGrafanaの組み合わせが最も効果的です。リアルタイムなメトリクス収集からダッシュボード作成まで、この2つのツールが提供する機能は圧倒的な柔軟性を持ちます。特にLinuxサーバーの監視においては、システムリソースの可視化だけでなく、アラート設定や長期的なデータ保存も可能になります。本記事では、実際に動作する監視システムを構築するまでの具体的な手順を、初心者でも理解できるように丁寧に解説します。


目次


はじめに:監視システムの必要性とメリット

サーバー監視は、システムの安定稼働を維持するために不可欠な要素です。特にLinuxサーバーでは、CPU使用率、メモリ消費量、ディスクI/O、ネットワークトラフィックなど、さまざまなリソースを常に監視する必要があります。これらのメトリクスを可視化することで、パフォーマンスのボトルネックを早期に発見し、障害発生時の迅速な対応が可能になります。

PrometheusとGrafanaを組み合わせることで、以下のようなメリットが得られます。

  • リアルタイム監視:Prometheusが収集するメトリクスは数秒単位で更新されるため、常に最新の状態を把握できます。
  • 柔軟なダッシュボード:Grafanaを使用すれば、直感的な操作でカスタマイズ可能なダッシュボードを作成できます。
  • アラート機能:CPU使用率が90%を超えた場合やディスク容量が不足した場合など、特定の条件でアラートを発報できます。
  • 長期的なデータ保存:Prometheusは時系列データを保存するため、過去のパフォーマンスを分析できます。
  • オープンソース:PrometheusとGrafanaはともにオープンソースソフトウェアであり、ライセンス費用が発生しません。

総務省の調査によると、2023年には日本国内の企業の68%が何らかの形でクラウドサービスを利用しており、その中でサーバー監視の重要性がますます高まっています(出典: 総務省「令和5年度情報通信利用動向調査」)。このような背景から、PrometheusとGrafanaを活用した監視システムの導入は、ITインフラの信頼性向上に直結します。


環境準備:必要なソフトウェアとハードウェア要件

PrometheusとGrafanaを導入する前に、適切な環境を整えることが重要です。以下に必要なソフトウェアとハードウェア要件をまとめます。

サポートされているOSとバ…

PrometheusとGrafanaは、以下のOSで動作が確認されています。

ソフトウェアサポートOS推奨バージョン
PrometheusLinux (Ubuntu, CentOS, RHEL), Windows2.47.0以上
GrafanaLinux (Ubuntu, CentOS, RHEL), Windows, macOS10.2.0以上
Node ExporterLinux (主要なディストリビューション)1.6.1以上

ハードウェア要件

監視対象のサーバー数や収集するメトリクスの量によって、必要なリソースは異なります。一般的な目安を以下に示します。

用途CPUメモリストレージネットワーク
Prometheusサーバー(100台以下の監視)2コア以上4GB以上SSD 50GB以上1Gbps以上
Grafanaサーバー2コア以上2GB以上HDD 20GB以上100Mbps以上
監視対象サーバー(Node Exporter)1コア以上512MB以上HDD 1GB以上100Mbps以上

ネットワーク要件

PrometheusとGrafana、Node Exporter間の通信は、以下のポートを使用します。

  • Prometheus:9090/tcp(Web UIとAPI)
  • Grafana:3000/tcp(Web UI)
  • Node Exporter:9100/tcp(メトリクス収集)

ファイアウォールやセキュリティグループでこれらのポートを開放する必要があります。特にクラウド環境では、セキュリティグループの設定を慎重に行ってください。

前提条件

以下のコマンドが実行できる環境を用意してください。

  • wget または curl
  • tar(アーカイブ展開用)
  • systemd(サービス管理用)
  • root権限またはsudo権限

本記事では、Ubuntu 22.04 LTSをベースに手順を解説しますが、他のLinuxディストリビューションでも同様の手順で導入できます。


Prometheusの導入と基本設定

Prometheusは、時系列データを収集・保存・クエリするためのオープンソースの監視システムです。高い拡張性と柔軟なクエリ言語(PromQL)を備えており、複雑な監視要件にも対応できます。

Prometheusのインストール手順

以下の手順でPrometheusをインストールします。

  1. Prometheusのダウンロード
    wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz

    最新バージョンは公式ダウンロードページから確認してください。

  2. アーカイブの展開
    tar xvfz prometheus-2.47.0.linux-amd64.tar.gz
  3. ディレクトリの移動
    cd prometheus-2.47.0.linux-amd64
  4. バイナリファイルの確認
    ls -l

    以下のファイルが表示されることを確認します。

    • prometheus:メインサーバー
    • promtool:設定ファイルの検証ツール
    • prometheus.yml:設定ファイル
    • consoles/:Web UI用のテンプレート
    • console_libraries/:テンプレートライブラリ

Prometheusの設定ファイル解説

Prometheusの動作はprometheus.ymlファイルで制御されます。以下は基本的な設定例です。

global:
  scrape_interval: 15s  # メトリクス収集の間隔
  evaluation_interval: 15s  # ルール評価の間隔

scrape_configs:
  - job_name: 'prometheus'  # 監視対象のジョブ名
    static_configs:
      - targets: ['localhost:9090']  # 監視対象のエンドポイント

主な設定項目は以下の通りです。

設定項目説明デフォルト値
global.scrape_intervalメトリクス収集の間隔15秒
global.evaluation_intervalアラートルールの評価間隔15秒
scrape_configs監視対象の設定なし
job_name監視ジョブの名前必須
targets監視対象のエンドポイント(IP:ポート)localhost:9090

この設定では、Prometheus自身のメトリクスをlocalhost:9090から15秒ごとに収集します。実際の運用では、Node Exporterや他の監視対象を追加します。

Prometheusの起動と動作確認

Prometheusを起動する前に、設定ファイルの検証を行います。

./promtool check config prometheus.yml

エラーがなければ、以下のコマンドでPrometheusを起動します。

./prometheus --config.file=prometheus.yml --web.listen-address=":9090" &

または、systemdサービスとして登録することを推奨します。以下はsystemdサービスファイルの例です。

sudo tee /etc/systemd/system/prometheus.service <

サービスを有効化し、起動します。

sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus

動作確認は、Webブラウザでhttp://<サーバーIP>:9090にアクセスします。PrometheusのWeb UIが表示されれば成功です。


Node Exporterの導入でLinuxサーバーのメトリクス収集

Node Exporterは、Linuxサーバーのシステムメトリクス(CPU、メモリ、ディスク、ネットワークなど)を収集するためのエージェントです。PrometheusがNode Exporterからメトリクスを取得することで、サーバーの状態を詳細に監視できます。

Node Exporter…

  1. Node Exporterのダウンロード
    wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
  2. アーカイブの展開
    tar xvfz node_exporter-1.6.1.linux-amd64.tar.gz
  3. バイナリファイルの移動
    cd node_exporter-1.6.1.linux-amd64
    sudo cp node_exporter /usr/local/bin/
  4. Node Exporterの起動
    sudo /usr/local/bin/node_exporter --web.listen-address=":9100" &

systemdサービスとして登録する場合は、以下のファイルを作成します。

sudo tee /etc/systemd/system/node_exporter.service <

サービスを有効化し、起動します。

sudo useradd -rs /bin/false node_exporter
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter

PrometheusからN…

Node Exporterが起動したら、Prometheusの設定ファイルprometheus.ymlに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 UI(http://:9090/targets)にアクセスし、node_exporterジョブのステータスがUPになっていることを確認します。


Grafanaの導入とPrometheusとの連携

Grafanaは、時系列データを可視化するためのオープンソースのダッシュボードツールです。Prometheusと連携することで、リアルタイムなメトリクス監視やアラート通知をグラフィカルに表示できます。

Grafanaのインストール手順

以下の手順でGrafanaをインストールします。

  1. Grafanaのリポジトリ追加
    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
  2. パッケージリストの更新とGrafanaのインストール
    sudo apt-get update
    sudo apt-get install grafana
  3. Grafanaの起動
    sudo systemctl daemon-reload
    sudo systemctl start grafana-server
    sudo systemctl enable grafana-server

GrafanaのWeb UIにアクセスするには、http://:3000にアクセスします。初期ログインは以下の通りです。

  • ユーザー名:admin
  • パスワード:admin

初回ログイン時にパスワードの変更が求められます。

Grafanaの初期設定とPrometheusデータソース追加

Grafanaにログインしたら、以下の手順でPrometheusをデータソースとして追加します。

  1. データソースの追加
    • 左側メニューのConfiguration > Data Sourcesをクリックします。
    • Add data sourceをクリックし、Prometheusを選択します。
  2. Prometheusの接続設定
    • Name:任意の名前(例:Prometheus-Server
    • URLhttp://:9090
    • AccessServer (default)を選択
    • Scrape interval15s(Prometheusの設定に合わせる)
  3. 保存とテスト
    • Save & Testをクリックします。
    • 接続が成功すればData source connected and labels foundと表示されます。

Grafanaダッシュボードの作成とカスタマイズ

Grafanaには、すでに多くのテンプレートダッシュボードが用意されています。Node Exporter用のダッシュボードをインポートする手順を以下に示します。

  1. ダッシュボードのインポート
    • 左側メニューのDashboards > Importをクリックします。
    • Import via grafana.com1860と入力し、Loadをクリックします。
    • 以下の設定を行います。
      • Name:任意の名前(例:Node Exporter Full
      • Prometheus:先ほど追加したデータソースを選択
    • Importをクリックします。
  2. ダッシュボードの確認
    • ダッシュボードが表示され、CPU、メモリ、ディスク、ネットワークなどのメトリクスがグラフィカルに表示されます。

ダッシュボードは自由にカスタマイズできます。例えば、特定のメトリクスを強調表示したり、アラートを設定したりすることが可能です。


監視対象のカスタマイズとアラート設定

PrometheusとGrafanaを活用することで、監視対象やアラートルールを柔軟にカスタマイズできます。ここでは、具体的な設定方法を解説します。

監視対象の追加

監視対象を追加するには、Prometheusの設定ファイルprometheus.ymlに新しいscrape_configsを追加します。例えば、複数のサーバーを監視する場合は以下のように設定します。

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'node_exporter'
    static_configs:
      - targets:
          - 'server1:9100'
          - 'server2:9100'
          - 'server3:9100'

設定を反映させるには、Prometheusを再起動します。

sudo systemctl restart prometheus

PrometheusのWeb UI(http://:9090/targets)で、すべてのターゲットがUP状態であることを確認します。

アラートルールの設定

Prometheusでは、特定の条件が発生した際にアラートを発報するルールを設定できます。アラートルールはrules.ymlファイルに定義し、Prometheusの設定ファイルから読み込みます。

以下は、CPU使用率が90%を超えた場合にアラートを発報するルールの例です。

groups:
- name: example
  rules:
  - alert: HighCPUUsage
    expr: (100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)) > 90
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "High CPU usage on {{ $labels.instance }}"
      description: "CPU usage is {{ $value }}% on {{ $labels.instance }}"

このルールを有効にするには、Prometheusの設定ファイルprometheus.ymlに以下を追加します。

rule_files:
  - "rules.yml"

設定を反映させるには、Prometheusを再起動します。

sudo systemctl restart prometheus

アラートはPrometheusのWeb UI(http://:9090/alerts)で確認できます。また、Grafanaと連携することで、アラートをメールやSlackなどに通知することも可能です。

Grafanaでのアラート設定

Grafanaでもアラートを設定できます。以下の手順でGrafanaのアラートを有効にします。

  1. アラートチャンネルの追加
    • 左側メニューのAlerting > Notification policiesをクリックします。
    • Add contact pointをクリックし、通知方法(メール、Slack、Webhookなど)を選択します。
  2. ダッシュボードへのアラート追加
    • ダッシュボード編集画面を開きます。
    • アラートを設定したいパネルを選択し、Editをクリックします。
    • Alertタブを開き、Create Alertをクリックします。
    • アラート名、条件、通知先を設定します。

Grafanaのアラートは、Prometheusのアラートルールと連携することで、より柔軟な通知体制を構築できます。


トラブルシューティング:よくあるエラーと解決策

PrometheusとGrafanaを導入する際に発生しやすいエラーとその解決策をまとめます。

Prometheus関連の…

エラー内容原因解決策
Get "http://localhost:9100/metrics": dial tcp 127.0.0.1:9100: connect: connection refusedNode Exporterが起動していないか、ポートが開放されていないNode Exporterを起動し、ファイアウォールでポート9100を開放
level=error ts=2023-10-01T12:34:56.789Z caller=main.go:337 msg="Error loading config"設定ファイルprometheus.ymlの構文エラーpromtool check config prometheus.ymlで構文を検証し、修正
scrape_interval too low, must be greater than 1sscrape_intervalが1秒未満に設定されているscrape_intervalを1秒以上に設定

Grafana関連のエラー

エラー内容原因解決策
Data source connected but returned no dataPrometheusとの接続は成功したが、データが取得できないPrometheusのtargetsUP状態か確認し、データソース設定を再確認
Plugin health check failedGrafanaのプラグインが正常に動作しないGrafanaを再起動し、必要に応じてプラグインを再インストール

一般的なトラブルシューティ…

  1. ログの確認

    PrometheusとGrafanaのログは以下の場所に保存されます。

    • Prometheus:/var/log/prometheus.log(設定により異なる)
    • Grafana:/var/log/grafana/grafana.log

    journalctlコマンドでリアルタイムにログを確認できます。

    sudo journalctl -u prometheus -f
    sudo journalctl -u grafana-server -f
  2. ポートの確認

    PrometheusとGrafanaが正しいポートでリッスンしているか確認します。

    sudo netstat -tulnp | grep -E '9090|9100|3000'
  3. ファイアウォールの確認

    ファイアウォールやセキュリティグループで必要なポートが開放されているか確認します。

    sudo ufw status  # Ubuntu
    sudo firewall-cmd --list-all  # CentOS/RHEL
  4. バージョンの確認

    使用しているバージョンに問題がないか確認します。

    prometheus --version
    grafana-server --version
    node_exporter --version

これらの手順でほとんどの問題は解決できます。それでも解決しない場合は、公式ドキュメントやコミュニティフォーラムを参照してください。


まとめ:監視システムの運用と今後の展望

PrometheusとGrafanaを活用したサーバー監視システムの導入は、ITインフラの信頼性とパフォーマンスを飛躍的に向上させます。本記事では、Linuxサーバーを対象とした監視システムの構築手順を、具体

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