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

サーバーの死活監視を始めるなら、Prometheusを使った監視システムが最も効果的です。リアルタイムなメトリクス収集と柔軟なアラート設定により、サーバー障害を即座に検知し、迅速な対応が可能になります。本記事では、Prometheusの基本設定から、実際の監視対象サーバーへの適用方法、さらには運用に必要なベストプラクティスまで、具体的な手順を交えて解説します。初心者でも理解できるよう、段階的に進められる構成となっており、実務ですぐに活用できる内容です。


目次


Prometheusとは:サーバー監視の最適解

Prometheusは、オープンソースの監視システムであり、サーバーやアプリケーションのメトリクスをリアルタイムで収集・蓄積・可視化することができます。2012年にSoundCloudで開発されて以来、クラウドネイティブな監視ソリューションとして広く採用されています。特に、サーバーの死活監視においては、以下のような特徴が優れています。

  • 高い柔軟性:カスタムメトリクスの収集や独自のアラートルールを定義可能
  • 時系列データベース:メトリクスを時系列で蓄積し、過去のデータと比較可能
  • アラート機能:条件に基づく自動アラートで迅速な対応が可能
  • 豊富なエコシステム:Exporterと呼ばれるエージェントを通じて、様々なシステムのメトリクスを収集可能

例えば、サーバーのCPU使用率が90%を超えた場合に即座にSlackやメールで通知する設定が簡単に行えます。このような機能により、システム障害の早期発見と迅速な対応が実現できます。

Prometheusが選ば…

サーバー監視ツールは数多く存在しますが、Prometheusが特に優れている点は以下の通りです。

機能Prometheus他の監視ツール(例:Zabbix)
データモデル時系列データベース(TSDB)リレーショナルデータベース
クエリ言語PromQL(専用のクエリ言語)SQLベース
アラート機能高度なルール設定と通知基本的なアラート設定
拡張性Exporterによる柔軟な拡張プラグインによる拡張

特に、時系列データベースの採用により、過去のデータとの比較やトレンド分析が容易に行える点が大きなメリットです。例えば、サーバーのCPU使用率が過去1週間でどのように変化したかをグラフ化し、異常なトレンドを早期に検知することができます。

Prometheusのアー…

Prometheusのアーキテクチャは、以下の主要コンポーネントで構成されています。

  • Prometheus Server:メトリクスの収集・蓄積・クエリ処理を担当
  • Exporter:監視対象サーバーにインストールされ、メトリクスを収集するエージェント
  • Alertmanager:アラートルールに基づいて通知を管理
  • Grafana:メトリクスの可視化とダッシュボード作成
  • Pushgateway:一時的なジョブからのメトリクス送信を中継

このアーキテクチャにより、Prometheusは柔軟でスケーラブルな監視システムを実現しています。例えば、複数のサーバーにExporterをインストールし、Prometheus Serverで一括管理することで、大規模なシステムでも効率的に監視が行えます。


導入前の準備:システム要件と環境構築

Prometheusを導入する前に、システム要件と環境構築について理解しておくことが重要です。以下の手順に従って、必要な環境を整えましょう。

システム要件

Prometheusを実行するための最低限のシステム要件は以下の通りです。

コンポーネントCPUメモリストレージOS
Prometheus Server2コア以上4GB以上SSD推奨(10GB以上)Linux(推奨:Ubuntu 20.04以上)
Exporter1コア以上512MB以上SSD推奨(1GB以上)Linux/Windows
Alertmanager1コア以上1GB以上SSD推奨(5GB以上)Linux

例えば、小規模なシステムであれば、Prometheus ServerとAlertmanagerを同一のサーバーで実行することも可能です。ただし、監視対象が増えるにつれて、リソース要件も増加します。大規模なシステムでは、Prometheus Serverを分散して実行することも検討しましょう。

環境構築の手順

以下の手順に従って、Prometheusの実行環境を構築します。

1. インストール前の準備

Prometheusをインストールする前に、以下のツールをインストールしておきましょう。

  • curl:Prometheusのバイナリをダウンロードするために使用
  • wget:代替のダウンロード手段として使用
  • tar:ダウンロードしたファイルを解凍するために使用

これらのツールは、以下のコマンドでインストールできます。

sudo apt update
sudo apt install -y curl wget tar

2. Prometheus Serverのインストール

Prometheus Serverをインストールするには、以下の手順を実行します。

  1. Prometheusの公式サイトから最新版のバイナリをダウンロードします。
  2. ダウンロードしたファイルを解凍し、実行可能な状態にします。
  3. Prometheusを実行するための設定ファイルを作成します。

具体的な手順は以下の通りです。

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

ディレクトリを移動

cd prometheus-2.47.0.linux-amd64

Prometheusの実行

Prometheusを実行するには、以下のコマンドを使用します。

./prometheus --config.file=prometheus.yml

このコマンドにより、Prometheus Serverが起動し、設定ファイル(prometheus.yml)に基づいてメトリクスを収集します。デフォルトでは、Prometheusは9090番ポートでリッスンします。

3. 設定ファイルの作成

Prometheusの設定ファイル(prometheus.yml)は、YAML形式で記述されます。以下は、基本的な設定例です。

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

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

この設定ファイルでは、Prometheus自身のメトリクスを15秒間隔で収集するように設定されています。監視対象を追加する場合は、scrape_configsセクションに新しいジョブを追加します。

Exporterの導入

Exporterは、監視対象サーバーにインストールされ、メトリクスを収集するエージェントです。Prometheusが直接収集できないメトリクス(例:サーバーのCPU使用率、メモリ使用率など)を収集するために使用します。

代表的なExporterには以下のようなものがあります。

  • Node Exporter:サーバーのシステムメトリクス(CPU、メモリ、ディスクなど)を収集
  • MySQL Exporter:MySQLデータベースのメトリクスを収集
  • Redis Exporter:Redisサーバーのメトリクスを収集
  • Blackbox Exporter:HTTP、HTTPS、TCPなどのプロトコルを介した死活監視を実行

例えば、サーバーのシステムメトリクスを収集するためには、Node Exporterを使用します。以下の手順で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

ディレクトリを移動

cd node_exporter-1.6.1.linux-amd64

Node Exporterを実行

./node_exporter

Node Exporterはデフォルトで9100番ポートでリッスンします。Prometheusの設定ファイルに以下のジョブを追加することで、Node Exporterからメトリクスを収集できます。

scrape_configs:
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['<監視対象サーバーのIP>:9100']

このように、Exporterを活用することで、Prometheusは様々なシステムのメトリクスを収集できるようになります。


Prometheusの基本設定:設定ファイルと起動方法

Prometheusの基本設定は、設定ファイル(prometheus.yml)を通じて行います。この設定ファイルでは、メトリクスの収集間隔や監視対象、アラートルールなどを定義します。以下では、設定ファイルの詳細と起動方法について解説します。

設定ファイルの構造

Prometheusの設定ファイルは、YAML形式で記述されます。以下は、基本的な設定ファイルの構造です。

global:
  scrape_interval: 15s
  evaluation_interval: 15s

rule_files:
  - 'alert.rules'

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

alerting:
  alertmanagers:
    - static_configs:
        - targets:
          - 'localhost:9093'

この設定ファイルでは、以下の要素が定義されています。

  • global:Prometheusのグローバル設定(収集間隔、評価間隔など)
  • rule_files:アラートルールが定義されたファイルのパス
  • scrape_configs:メトリクス収集の設定(監視対象のジョブ名、エンドポイントなど)
  • alerting:Alertmanagerの設定

グローバル設定

グローバル設定では、Prometheus全体に関わる設定を行います。主な設定項目は以下の通りです。

設定項目説明デフォルト値
scrape_intervalメトリクス収集の間隔15s
evaluation_intervalアラートルールの評価間隔15s
scrape_timeoutメトリクス収集のタイムアウト時間10s
external_labelsPrometheusが収集したメトリクスに付与するラベルなし

例えば、メトリクス収集の間隔を30秒に設定する場合は、以下のように記述します。

global:
  scrape_interval: 30s
  evaluation_interval: 30s

監視対象の設定

監視対象の設定は、scrape_configsセクションで行います。以下は、Node Exporterを監視対象として追加する例です。

scrape_configs:
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['192.168.1.100:9100']
    scrape_interval: 30s
    scrape_timeout: 10s

この設定では、IPアドレス192.168.1.100のサーバーで実行されているNode Exporterから、30秒間隔でメトリクスを収集します。タイムアウトは10秒に設定されています。

動的なターゲット設定

Prometheusでは、動的なターゲット設定も可能です。例えば、Kubernetes環境では、サービスディスカバリーを使用して、動的に監視対象を追加・削除できます。以下は、Kubernetesのサービスディスカバリーを使用する例です。

scrape_configs:
  - job_name: 'kubernetes-pods'
    kubernetes_sd_configs:
      - role: pod
    relabel_configs:
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
        action: keep
        regex: true

この設定では、Kubernetesクラスタ内のPodのうち、prometheus.io/scrape: "true"というアノテーションが付与されているPodのみを監視対象としています。

アラートルールの設定

アラートルールは、rule_filesセクションで定義されたファイルに記述します。以下は、アラートルールの例です。

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: critical
    annotations:
      summary: "High CPU usage on {{ $labels.instance }}"
      description: "CPU usage is {{ $value }}% for more than 5 minutes."

このアラートルールでは、CPU使用率が90%以上で5分間継続した場合に、HighCPUUsageというアラートを発生させます。アラートの重大度はcriticalに設定され、通知メッセージにはインスタンス名とCPU使用率が含まれます。

Alertmanagerの設定

Alertmanagerは、アラートルールに基づいて通知を管理するコンポーネントです。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/'

この設定では、アラートをalertnameでグループ化し、10秒待ってから通知を送信します。通知先はWebhookとして設定されており、指定したURLにPOSTリクエストで通知が送信されます。

Prometheusの起動…

設定ファイルが完成したら、Prometheusを起動します。以下のコマンドでPrometheusを起動します。

./prometheus --config.file=prometheus.yml

Prometheusが正常に起動すると、以下のメッセージが表示されます。

level=info ts=2023-10-01T12:00:00.000Z caller=main.go:XXX msg="Starting Prometheus" version="(version=2.47.0, branch=HEAD, revision=...)"
level=info ts=2023-10-01T12:00:00.000Z caller=main.go:XXX msg="Build context" context="(go=go1.21.0, user=root@..., date=...)"
level=info ts=2023-10-01T12:00:00.000Z caller=main.go:XXX msg="Start listening for connections" address=:9090

Prometheusが起動したら、Webブラウザでhttp://:9090にアクセスします。以下の画面が表示されれば、Prometheusが正常に動作しています。

  • Status:Prometheusのステータスや設定を確認
  • Targets:監視対象のステータスを確認
  • Alerts:アラートルールのステータスを確認
  • Graph:PromQLを使用したメトリクスのクエリとグラフ化

例えば、Targetsページでは、監視対象のステータス(UP/DOWN)や最終収集時刻を確認できます。これにより、監視対象が正常に動作しているかどうかを簡単に確認できます。


監視対象サーバーの設定:Exporterの導入と設定

Prometheusでサーバーの死活監視を行うためには、監視対象サーバーにExporterを導入し、メトリクスを収集する必要があります。以下では、代表的なExporterの導入方法と設定について解説します。

Node Exporter…

Node Exporterは、サーバーのシステムメトリクス(CPU、メモリ、ディスク、ネットワークなど)を収集するためのExporterです。以下の手順でNode Exporterを導入します。

Node Exporterのインストール

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

ディレクトリを移動

cd node_exporter-1.6.1.linux-amd64

Node Exporterを実行

./node_exporter

Node Exporterはデフォルトで9100番ポートでリッスンします。ブラウザでhttp://<サーバーのIP>:9100/metricsにアクセスすると、収集されたメトリクスが表示されます。

Node Exporterのサービス化

Node Exporterをサービスとして実行することで、システム起動時に自動的に起動するように設定できます。以下の手順でNode Exporterをサービス化します。

サービスファイルの作成

sudo nano /etc/systemd/system/node_exporter.service

以下の内容を入力します。

[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target

ユーザーとグループの作成

sudo useradd --no-create-home --shell /bin/false node_exporter

Node Exporterのインストール

sudo cp node_exporter /usr/local/bin/
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

これにより、Node Exporterがシステム起動時に自動的に起動するようになります。

Prometheusの設定ファイルにNode Exporterを追加

Prometheusの設定ファイル(prometheus.yml)にNode Exporterを監視対象として追加します。

scrape_configs:
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['<監視対象サーバーのIP>:9100']

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

sudo systemctl restart prometheus

PrometheusのWeb UI(http://:9090/targets)でNode ExporterのステータスがUPになっていれば、正常に設定されています。

その他のExporterの導入

Node Exporter以外にも、様々なExporterが提供されています。以下では、代表的なExporterの導入方法について解説します。

MySQL Exporter

MySQL Exporterは、MySQLデータベースのメトリクスを収集するためのExporterです。以下の手順でMySQL Exporterを導入します。

# MySQL Exporterのダウンロード
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.0/mysqld_exporter-0.15.0.linux-amd64.tar.gz

ダウンロードしたファイルを解凍

tar xvfz mysqld_exporter-0.15.0.linux-amd64.tar.gz

ディレクトリを移動

cd mysqld_exporter-0.15.0.linux-amd64

MySQL Exporterを実行する前に、MySQLデータベースに専用のユーザーを作成します。

CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'password';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
FLUSH PRIVILEGES;

MySQL Exporterを実行します。

./mysqld_exporter --config.my-cnf=my.cnf

my.cnfファイルには、以下の内容を記述します。

[client]
user=exporter
password=password

MySQL Exporterはデフォルトで9104番ポートでリッスンします。Prometheusの設定ファイルに以下のジョブを追加します。

scrape_configs:
  - job_name: 'mysql_exporter'
    static_configs:
      - targets: ['<監視対象サーバーのIP>:9104']

Redis Exporter

Redis Exporterは、Redisサーバーのメトリクスを収集するためのExporterです。以下の手順でRedis Exporterを導入します。

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