vmstatやsarで瞬間値は取れても、過去1時間のトレンドが追えない。異常が起きた時刻を特定できない。そんな課題を抱えているLinuxエンジニアは多いでしょう。
この記事では、オープンソースの監視ツールPrometheusと、Linuxサーバーのメトリクスを収集するNode Exporterのインストール手順を解説します。prometheus.ymlの設定方法、よく使うPromQL、Alertmanagerを使ったアラート設定まで、RHEL 9.4 / Rocky Linux 9.4で動作確認した実機の出力例とともに紹介します。
この記事のポイント
・PrometheusはPull型の監視ツールで、定期的にターゲットからメトリクスを取得して時系列DBに保存する
・Node ExporterをサーバーにインストールするだけでCPU・メモリ・ディスクI/Oを自動収集できる
・prometheus.ymlのscrape_intervalとtargetsを設定し、promtoolで構文チェックしてから適用する
・Alertmanagerと組み合わせることで、閾値超過時のメール通知が自動化できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
なぜPrometheusでサーバーを監視するのか?(Pull型監視の仕組み)
Prometheusは、Linuxサーバーをはじめとするインフラのメトリクスを時系列データとして収集・保存する監視システムです。Cloud Native Computing Foundation(CNCF)が管理するOSSで、KubernetesやDockerと組み合わせて広く使われています。Prometheusの特徴はPull型であることです。監視対象のサーバーに導入したNode Exporterがデータを送るのではなく、PrometheusがNode Exporterの公開するHTTPエンドポイントから定期的にメトリクスを取得します。これにより、監視対象が増えても設定の変更はPrometheus側だけで済みます。
従来ツール(vmstat・sar)との違い
・vmstat・sar:手動実行のスナップショット。過去データは/var/log/saに保存されるが検索しにくい
・Prometheus:連続収集・時系列DB(TSDB)に保存。PromQLで任意の時刻範囲を自在に検索できる
主要コンポーネントと使用ポート
・Prometheus(ポート9090):スクレイプ・保存・クエリのコア
・Node Exporter(ポート9100):LinuxのOS情報をHTTPで公開するエージェント
・Alertmanager(ポート9093):アラートのルーティングと通知(メール・Slack等)
・Grafana(ポート3000):PromQLをもとにダッシュボードを描画する可視化ツール(別途インストール)
PrometheusとNode Exporterをインストールする(RHEL 9.4 / Rocky Linux 9.4対応)
インストールはバイナリをダウンロードして配置する方法が公式推奨です。dnfリポジトリ経由では最新版が手に入らないケースが多いため、GitHub Releasesから直接取得します。1. 専用ユーザーとディレクトリを作成する
まず、PrometheusとNode Exporterを実行するための専用ユーザーを作成します。ログインシェルを持たないシステムユーザーにすることで、万が一の侵害時の影響範囲を最小化できます。# PrometheusおよびNode Exporter用の専用ユーザーを作成 sudo useradd -M -s /sbin/nologin -r prometheus sudo useradd -M -s /sbin/nologin -r node_exporter # 設定ファイル用ディレクトリ・データ保存用ディレクトリを作成 sudo mkdir -p /etc/prometheus /var/lib/prometheus # 所有者をprometheusユーザーに変更 sudo chown prometheus:prometheus /etc/prometheus /var/lib/prometheus
2. Prometheusのバイナリをダウンロードしてインストールする
# バイナリをダウンロード(最新版はhttps://github.com/prometheus/prometheus/releasesで確認) cd /tmp curl -LO https://github.com/prometheus/prometheus/releases/download/v2.54.0/prometheus-2.54.0.linux-amd64.tar.gz # アーカイブを展開 tar xzf prometheus-2.54.0.linux-amd64.tar.gz cd prometheus-2.54.0.linux-amd64 # バイナリを/usr/local/binに配置 sudo cp prometheus promtool /usr/local/bin/ sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool # デフォルトの設定ファイルとコンソールを配置 sudo cp -r consoles/ console_libraries/ /etc/prometheus/ sudo cp prometheus.yml /etc/prometheus/ sudo chown -R prometheus:prometheus /etc/prometheus/
$ prometheus --version prometheus, version 2.54.0 (branch: HEAD, revision: abcdef123456) build user: root@buildhost build date: 20260601-10:00:00 go version: go1.22.3 platform: linux/amd64
3. Prometheusをsystemdサービスとして登録する
sudo vi /etc/systemd/system/prometheus.service
[Unit] Description=Prometheus Monitoring System After=network.target [Service] Type=simple User=prometheus ExecStart=/usr/local/bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus/data --storage.tsdb.retention.time=15d --web.listen-address=0.0.0.0:9090 Restart=on-failure [Install] WantedBy=multi-user.target
sudo systemctl daemon-reload sudo systemctl enable --now prometheus sudo systemctl status prometheus
* prometheus.service - Prometheus Monitoring System Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; preset: disabled) Active: active (running) since Fri 2026-07-04 10:23:45 JST; 3s ago Main PID: 12345 (prometheus) Tasks: 9 (limit: 23170) Memory: 38.2M CPU: 1.102s CGroup: /system.slice/prometheus.service └─12345 /usr/local/bin/prometheus --config.file=/etc/prometheus/prometheus.yml
4. Node Exporterをインストールしてサービス登録する
Node ExporterはLinuxサーバーのCPU・メモリ・ディスク・ネットワークなどのメトリクスを/metricsエンドポイントで公開します。cd /tmp curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz tar xzf node_exporter-1.8.2.linux-amd64.tar.gz sudo cp node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin/ sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
sudo vi /etc/systemd/system/node_exporter.service
[Unit] Description=Node Exporter After=network.target [Service] Type=simple User=node_exporter ExecStart=/usr/local/bin/node_exporter Restart=on-failure [Install] WantedBy=multi-user.target
sudo systemctl daemon-reload sudo systemctl enable --now node_exporter # 動作確認:/metricsエンドポイントにアクセスしてメトリクスが取得できるか確認 curl -s http://localhost:9100/metrics | head -20
# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. # TYPE go_gc_duration_seconds summary go_gc_duration_seconds{quantile="0"} 2.7e-05 go_gc_duration_seconds{quantile="0.25"} 3.5e-05 go_gc_duration_seconds{quantile="0.5"} 5.2e-05 go_gc_duration_seconds{quantile="0.75"} 9.4e-05 go_gc_duration_seconds{quantile="1"} 0.000312 # HELP node_cpu_seconds_total Seconds the CPUs spent in each mode. # TYPE node_cpu_seconds_total counter node_cpu_seconds_total{cpu="0",mode="idle"} 12456.78 node_cpu_seconds_total{cpu="0",mode="iowait"} 23.45 node_cpu_seconds_total{cpu="0",mode="system"} 123.67 node_cpu_seconds_total{cpu="0",mode="user"} 234.89
prometheus.ymlを設定してNode Exporterをスクレイプターゲットに追加する
1. 設定ファイルの構造を理解する
/etc/prometheus/prometheus.yml の基本構造は以下の通りです。global: scrape_interval: 15s # メトリクスを収集する間隔(デフォルト: 1分) evaluation_interval: 15s # アラートルールを評価する間隔 alerting: alertmanagers: - static_configs: - targets: [] # Alertmanagerのアドレス(後で設定) rule_files: [] # アラートルールファイルのパス scrape_configs: - job_name: "prometheus" static_configs: - targets: ["localhost:9090"]
2. Node Exporterをターゲットに追加する
scrape_configs セクションにNode Exporterのターゲットを追加します。複数台のサーバーを監視する場合は、targetsにIPアドレスを列挙します。sudo vi /etc/prometheus/prometheus.yml
global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: "prometheus" static_configs: - targets: ["localhost:9090"] - job_name: "node" static_configs: - targets: ["localhost:9100"] labels: alias: "web-server-01" # 複数台管理時に識別しやすくなる
3. promtoolで設定を検証してPrometheusを再起動する
設定ファイルを変更したら、promtoolで構文チェックを行ってから反映します。本番環境での設定ミスを防ぐために、このステップを必ず実施してください。# 設定ファイルの構文チェック(エラーがあれば詳細が表示される) promtool check config /etc/prometheus/prometheus.yml
Checking /etc/prometheus/prometheus.yml SUCCESS: /etc/prometheus/prometheus.yml is valid prometheus config file syntax
# 設定を反映(SIGHUPを送ることで再起動なしに設定を再読み込みできる) sudo systemctl reload-or-restart prometheus
Web UIでメトリクスを確認する(PromQL入門)
1. ブラウザからPrometheus Web UIにアクセスする
Prometheusが起動していれば、サーバーのIPアドレスとポート9090にブラウザからアクセスできます。コマンドラインから接続確認する場合はcurlを使います。# curlでPrometheus本体の稼働状態を確認 curl -s http://localhost:9090/-/healthy # 出力: Prometheus Server is Healthy. # ターゲットの状態確認(UP/DOWNが分かる) curl -s http://localhost:9090/api/v1/targets | python3 -m json.tool | grep health
2. よく使うPromQLクエリ
PromQL(Prometheus Query Language)でメトリクスを検索します。以下は実務でよく使うクエリです。| 監視項目 | PromQLクエリ例 |
|---|---|
| CPU使用率(%) | 100 - (avg by(instance)(rate(node_cpu_seconds_total{mode=idle}[5m])) * 100) |
| メモリ使用率(%) | (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 |
| ディスク使用率(%) | (1 - node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100 |
| ディスクI/O飽和度 | rate(node_disk_io_time_seconds_total[5m]) |
| ネットワーク受信(bps) | rate(node_network_receive_bytes_total[5m]) * 8 |
firewalldでPrometheusとNode Exporterのポートを開放する
外部のGrafanaサーバーや監視クライアントから接続する場合は、firewalldでポートを開放する必要があります。ポートの疎通確認方法はLinux ポート確認の全コマンドも参照してください。# Prometheusのポート(9090)を開放 sudo firewall-cmd --permanent --add-port=9090/tcp # Node Exporterのポート(9100)を開放 sudo firewall-cmd --permanent --add-port=9100/tcp # Alertmanagerのポート(9093)を開放 sudo firewall-cmd --permanent --add-port=9093/tcp # 設定を反映 sudo firewall-cmd --reload # 開放済みポートの確認 sudo firewall-cmd --list-ports
9090/tcp 9093/tcp 9100/tcp
Prometheusでグラフが見えても「なぜそうなるか」を説明できますか?
監視ツールを動かせても、サーバーのリソース設計・トラブル切り分けの「型」がなければ、本番障害で手が止まります。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
Alertmanagerでアラートを設定する
1. Alertmanagerをインストールする
cd /tmp curl -LO https://github.com/prometheus/alertmanager/releases/download/v0.28.0/alertmanager-0.28.0.linux-amd64.tar.gz tar xzf alertmanager-0.28.0.linux-amd64.tar.gz sudo cp alertmanager-0.28.0.linux-amd64/alertmanager /usr/local/bin/ sudo mkdir -p /etc/alertmanager /var/lib/alertmanager
sudo vi /etc/alertmanager/alertmanager.yml
global: smtp_smarthost: 'localhost:25' smtp_from: 'alertmanager@example.com' route: receiver: 'default' receivers: - name: 'default' email_configs: - to: 'admin@example.com'
sudo vi /etc/systemd/system/alertmanager.service
[Unit] Description=Prometheus Alertmanager After=network.target [Service] Type=simple User=prometheus ExecStart=/usr/local/bin/alertmanager --config.file=/etc/alertmanager/alertmanager.yml --storage.path=/var/lib/alertmanager Restart=on-failure [Install] WantedBy=multi-user.target
sudo systemctl daemon-reload sudo systemctl enable --now alertmanager sudo systemctl status alertmanager
2. アラートルールを定義する
CPUやメモリの閾値超過を検知するアラートルールを作成します。sudo vi /etc/prometheus/alert_rules.yml
groups: - name: server_alerts rules: - alert: HighCPUUsage expr: 100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90 for: 5m labels: severity: warning annotations: summary: "CPU使用率が90%を超えています" - alert: HighMemoryUsage expr: (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 > 85 for: 5m labels: severity: warning annotations: summary: "メモリ使用率が85%を超えています" - alert: DiskSpaceLow expr: (1 - node_filesystem_avail_bytes{fstype!="tmpfs"} / node_filesystem_size_bytes) * 100 > 80 for: 10m labels: severity: critical annotations: summary: "ディスク使用率が80%を超えています"
# /etc/prometheus/prometheus.yml を以下のように更新する rule_files: - "alert_rules.yml" alerting: alertmanagers: - static_configs: - targets: ["localhost:9093"]
# アラートルールの構文チェック promtool check rules /etc/prometheus/alert_rules.yml
Checking /etc/prometheus/alert_rules.yml SUCCESS: 3 rules found
sudo systemctl reload-or-restart prometheus
トラブルシュート|よくあるエラーと対処法
1. Prometheusが起動しない(Active: failed)
設定ファイルのパスや権限が正しいか確認します。# サービスログでエラー内容を確認 sudo journalctl -u prometheus -n 50 --no-pager # よくある原因1: 設定ファイルが存在しない ls -la /etc/prometheus/prometheus.yml # よくある原因2: ディレクトリの所有者がprometheusになっていない ls -la /var/lib/prometheus/ # 修正 sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
2. ターゲットがDOWN状態になる
Prometheus Web UI(http://[サーバーIP]:9090/targets)でターゲットの状態を確認します。DOWNになる主な原因は以下の通りです。・Node Exporterが停止している →
sudo systemctl status node_exporter で確認・firewalldで9100ポートがブロックされている →
sudo firewall-cmd --list-ports で確認・prometheus.yml のtargetsのIPアドレス・ポートが間違っている → 設定を見直す
接続確認にはcurlを使います。
# Node ExporterへのHTTPアクセスを確認(PrometheusサーバーのPCからテスト) curl -s http://192.168.1.10:9100/metrics | head -5
3. SELinuxが原因でポートをLISTENできない
RHEL/Rocky Linux環境ではSELinuxが有効な場合があります。Prometheusが特定ポートをLISTENできない場合はAVCログを確認します。# SELinuxのDENYログを確認 sudo ausearch -m avc -ts recent # 必要に応じてポートのSELinuxコンテキストを設定 sudo semanage port -a -t http_port_t -p tcp 9090 sudo semanage port -a -t http_port_t -p tcp 9100
本記事のまとめ
PrometheusとNode Exporterを使ったLinuxサーバー監視の構築手順を解説しました。時刻同期の重要性について
時系列データベースを使うPrometheusでは、監視対象サーバーの時刻が正確であることが前提となります。サーバーの時刻がずれているとメトリクスのタイムスタンプがずれてグラフが乱れたり、アラートが誤動作したりします。ntpd 時刻同期設定も合わせて確認してください。
| やりたいこと | コマンド |
|---|---|
| Prometheusのバージョン確認 | prometheus --version |
| 設定ファイルの構文チェック | promtool check config /etc/prometheus/prometheus.yml |
| アラートルールの構文チェック | promtool check rules /etc/prometheus/alert_rules.yml |
| Node Exporterのメトリクス確認 | curl -s http://localhost:9100/metrics |
| Prometheusの稼働状態確認 | curl -s http://localhost:9090/-/healthy |
| サービスの状態確認 | systemctl status prometheus |
| 設定変更の反映 | sudo systemctl reload-or-restart prometheus |
| ポート開放(9090/tcp) | sudo firewall-cmd --permanent --add-port=9090/tcp |
Prometheus監視環境を「本番で安心して使える状態」にするには、Linuxの基礎設計力が必要です
サービス登録・firewalld・SELinux対処——どれも「Linuxサーバーの運用設計」の基礎があってこそスムーズに進みます。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 前のページへ:bashで関数を定義して再利用する方法|シェルスクリプトのライブラリ化と実践例
- この記事の属するカテゴリ:Linuxtips・Linuxサーバー構築(Rocky Linux/RHEL9)へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます