ホームラボを監視しよう。Prometheus + Grafana で始めるお手軽サーバー監視入門

ホームラボを監視しよう。Prometheus + Grafana で始めるお手軽サーバー監視入門

AIによるこの記事の要約
自宅サーバー環境(ホームラボ)に Prometheus + Grafana を導入し、OS 標準の systemd 管理で監視基盤を構築する手順を解説。RHEL 系での Cockpit とのポート競合(9090 vs 9091)や、SELinux による接続拒否の解決策(カスタムポリシー作成)など、実践的なトラブルシューティングを網羅しています。さらに、Raspberry Pi や Windows 11 ARM(windows_exporter)を監視対象に加える「子機」構成まで、マルチプラットフォームな監視環境を構築するための備忘録です。

はじめに

自宅サーバー、いわゆるホームラボを運用していると「今、負荷はどのくらい?」「ディスクの空きは大丈夫?」と気になることが増えてきます。

私自身、先日こんなことがありました。
リモートから作業しようと SSH や RDP を試みたものの、一向につながらない。「電源が落ちているのかな?」と実機を確認しに行くと、なんと LAN ケーブルが物理的に死んでいて、起動はしたままだったのです。

「つながらない」という事実が起きてから右往左往するのではなく、常日頃から「生きていること(死活)」や「リソースの状態」を可視化できていれば、原因の切り分けはもっとスマートになります。

今回は、監視の定番構成である Prometheus + Grafana を使い、自宅のメインサーバー(母艦)だけでなく、Raspberry Pi や Windows 11 ARM マシンまで一元的に可視化する環境を構築しました。
あえて Docker や Podman を使わず、systemd として動かすことで、OS 標準の管理に載せた「見通しの良い」構成を目指します。

構成の全体像

母艦となるサーバーに Prometheus と Grafana を集約し、各監視対象に「Exporter」を配置してメトリクスを収集します。

  • 母艦サーバー (RHEL 10)
    • Grafana: メトリクスの可視化(ダッシュボード)
    • Prometheus: メトリクスの収集・蓄積
    • node_exporter: 自身の OS メトリクスを公開
  • 子機 (Raspberry Pi / Windows)
    • node_exporter / windows_exporter: 各自のメトリクスを公開

待ち受けポートの整理

ここが最初のポイントです。RHEL 系では管理ツールの Cockpit が標準で 9090 を使うため、Prometheus のポートをずらしています。

サービスポート公開範囲備考
Grafana3000LAN 内監視画面。ブラウザからアクセス
Cockpit9090-RHEL 標準。Prometheus と競合する
Prometheus9091127.0.0.1外部公開せず内部参照のみ
node_exporter9100-Linux メトリクス用
windows_exporter9182-Windows メトリクス用

Ansible による母艦の自動構築

構築は Ansible で自動化しました。主なタスクは以下の通り。

  1. Prometheus / Grafana の導入
  2. firewalld の設定: Grafana 用に 3000/tcp を開放。
  3. Prometheus の隠蔽: 内部参照のみにするため、127.0.0.1:9091 で待ち受け。
# 抜粋:Ansible 変数設定
prometheus_listen_address: "127.0.0.1:9091"
grafana_prometheus_datasource_url: http://127.0.0.1:9091
monitoring_firewalld_ports:
  - 3000/tcp

Grafana の初期ログイン

構築が完了したら、ブラウザで http://<母艦の IP>:3000 にアクセスします。

初期ログイン情報は以下の通りです。

  • User: admin
  • Password: admin

Grafana ログイン画面

Grafana ログイン画面

ログイン後、パスワードの変更を求められます。Ansible 側で grafana_admin_password を指定している場合は、そちらを使用してください。

ハマりどころ:SELinux とポート競合

1. Cockpit との衝突

前述の通り、9090 が使えなかったため Prometheus を 9091 に変更しました。 起動確認は curl で行います。

curl -s http://127.0.0.1:9091/-/ready
# "Prometheus Server is Ready." が返れば OK

2. SELinux による「Permission Denied」

Grafana のデータソース設定で Prometheus を指定すると、connect: permission denied と怒られました。

原因は SELinux です。Grafana がローカルポートへ接続する権限がないため、以下の Boolean をオンにする必要があります。

sudo setsebool -P grafana_can_tcp_connect_prometheus_port on

さらに今回の環境では 9091/tcp に対するカスタムポリシーが必要だったため、CIL(Common Intermediate Language)で以下のような許可設定を加えました。

(type prometheus_grafana_port_t)
(typeattributeset port_type (prometheus_grafana_port_t))
(allow grafana_t prometheus_grafana_port_t (tcp_socket (name_connect)))

監視対象を増やす(Raspberry Pi & Windows 11 ARM)

母艦が整ったら、監視対象(子機)を増やしていきます。

Raspberry Pi (Linux)

子機には node_exporter だけをインストールします。母艦の prometheus.yml で子機の IP を指定して scrape するだけです。

Windows 11 ARM (Windows)

近年増えている Windows ARM 環境。ここにはwindows_exporter を使います。

  1. ARM64 用 MSI を GitHub から入手しインストール。
  2. Firewall 開放: PowerShell でポート 9182 を開けます。
    New-NetFirewallRule -DisplayName "Prometheus Windows Exporter" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 9182
    

Prometheus の設定例

job_name: node に Linux 群を、job_name: windows に Windows マシンをまとめると管理しやすくなります。

scrape_configs:
  - job_name: "node"
    static_configs:
      - targets: ["localhost:9100", "192.168.1.151:9100"]
  - job_name: "windows"
    static_configs:
      - targets: ["192.168.1.200:9182"]

Grafana での可視化

ダッシュボードを一から作るのは大変なので、定番の ID をインポートしましょう。

Grafana ダッシュボード画面

Grafana ダッシュボード画面

※データが欠落している時間帯は、Raspberry Pi に冷却ファンを装着していたため、電源を外していた影響です。

  • Linux 用: 1860 (Node Exporter Full)
  • Windows 用: 14694 (Windows Exporter)

まとめ

Prometheus + Grafana + node_exporter を使うと、ホームラボの「健康状態」が一目で分かるようになります。

今回の構築で得られた知見は以下の通り。

  • ポート設計: 既存サービス(Cockpit 等)との競合を避ける。
  • セキュリティ: Prometheus 自体は localhost に閉じ、SELinux で接続許可を絞る。
  • マルチプラットフォーム: Windows ARM でもネイティブな Exporter で軽量に監視可能。

次は Grafana Alerting を設定し、ディスク使用率が 85% を超えたら Slack や Discord に通知が飛ぶようにする予定です。監視があるだけで、ホームラボの運用はぐっと楽になりますね!

@urchin_hat
Written by
@urchin_hat

とある領域のSaaSサービスでSREとして活動中。現在はインフラの正常化とAIを活用した運用効率化(AIOps)に注力しています。

Back to Memo