Prometheusでサーバーメトリクスを監視する方法|node_exporterのインストールからAlertmanagerまで

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips, Linuxサーバー構築(Rocky Linux/RHEL9) > Prometheusでサーバーメトリクスを監視する方法|node_exporterのインストールからAlertmanagerまで
「サーバーがなんとなく重い気がするけど、何が原因か分からない」「CPUやメモリの使用率を時系列でグラフ化したい」
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と組み合わせることで、閾値超過時のメール通知が自動化できる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

なぜ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

【セキュリティ注意】Node Exporterの9100ポートをインターネットに無制限公開するのは危険です。監視サーバー(PrometheusのIPアドレス)のみを許可するように --add-rich-rule でIPアドレス制限を設けることを強く推奨します。

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%を超えています"

prometheus.yml にアラートルールファイルを指定し、Alertmanagerを接続します。

# /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日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。