サーバーが「ダウン」してから慌てないために
夜中の3時に上司からの電話で叩き起こされ、Webサイトがダウンしていると告げられたことはありませんか?調べてみると、原因は単なる「ディスク容量不足」だった…。以前、CentOS 8サーバーを管理していた頃、私はよく各サーバーにSSHでログインし、topやdf -hを何度も叩いていました。このやり方は非常に手間がかかり、効率も良くありません。
CentOS 8のサポート終了後、システム全体をCentOS Stream 9に移行しました。これを機に、監視プロセスの標準化を行いました。このツールはメモリを15〜30MB程度しか消費しませんが、500以上の異なるシステム指標を収集できます。CentOS Stream 9において最大の課題はインストールそのものではなく、Prometheusへデータをスムーズに流すためにSELinuxやFirewalldの「壁」をどう乗り越えるかという点にあります。
ステップ1:ユーザー設定とNode Exporterのダウンロード
セキュリティの観点から、Node Exporterをroot權限で実行するのは絶対に避けるべきです。サービスを隔離するため、ログイン権限を持たない専用のシステムユーザーを作成します。
# 専用のシステムユーザーを作成
sudo useradd --no-create-home --shell /bin/false node_exporter
現在、バージョン1.8.2が非常に安定しています。デフォルトのリポジトリにある古いバージョンではなく、PrometheusのGitHubで最新版を確認し、新しいコレクターを利用できるようにすることをお勧めします。
# バイナリをダウンロードして解凍
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 -xvf node_exporter-1.8.2.linux-amd64.tar.gz
# 実行ディレクトリに移動して権限を設定
sudo mv node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin/
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
ステップ2:Systemdによる管理
OS起動時にサービスが自動開始されるよう、systemdのユニットファイルを作成します。トラブルシューティングが困難になるため、screenやnohupは使用しないでください。
sudo vi /etc/systemd/system/node_exporter.service
最小限かつ安全な設定ファイルの内容は以下の通りです:
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
Restart=always
[Install]
WantedBy=multi-user.target
おなじみの3つのコマンドでサービスを有効化します:
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
ステップ3:FirewalldとSELinuxの壁を越える
ここは多くの人が頭を抱える部分です。サービスはactiveと表示されているのに、Prometheus側ではDown(Context deadline exceeded)と表示されることがあります。
Firewalldのポート開放
CentOS Stream 9はポート制限が非常に厳格です。Prometheusサーバーがデータを取得しに来れるよう、ポート9100を開放する必要があります。
sudo firewall-cmd --permanent --add-port=9100/tcp
sudo firewall-cmd --reload
SELinuxへの対応
SELinuxは通常、Node Exporterが/proc内の機密ファイルにアクセスするのをブロックします。SELinux自体を無効化するのは非常に危険なため、実行ファイルにラベルを付与してシステムから信頼されるようにします。
# systemd配下で正しく実行されるよう、bin_tラベルを付与
sudo chcon -u system_u -r object_r -t bin_t /usr/local/bin/node_exporter
ステップ4:動作確認
サーバー自身でデータを出力できるか試してみましょう。node_memory_Active_bytesのような行がずらりと表示されれば成功です。
curl http://localhost:9100/metrics
ステップ5:Prometheusとの接続とGrafanaでの可視化
監視サーバーのprometheus.ymlに新しいターゲットを追加します。CPU負荷を抑えつつスムーズなグラフを表示するために、scrape_intervalは15秒程度に設定することをお勧めします。
scrape_configs:
- job_name: 'centos-stream-9'
static_configs:
- targets: ['192.168.1.10:9100']
最後に、Grafana Dashboard ID: 1860 を使用しましょう。これは最も標準的なテンプレートで、ネットワーク帯域からディスクの読み書き速度(Disk IO)まで、リアルタイムで監視することができます。
実践的なアドバイス
- 不要なデータのフィルタリング: サーバーに多数の仮想ディスク(Docker vethなど)がある場合は、
--collector.network.device-excludeフラグを使用してダッシュボードを整理しましょう。 - セキュリティ: 内部VPNを使用していない場合は、Firewalldでポート9100にアクセスできるIPを制限してください。ハードウェア情報をインターネットに公開してはいけません。Shodanのようなツールを使えば、数分でサーバーがスキャンされてしまいます。
Node Exporterのインストール自体は難しくありません。しかし、セキュリティを担保し、指標を最適化するように設定することが重要です。このガイドが、皆さんのシステムを常に管理下に置く助けになれば幸いです。

