HomeLab Monitor について
HomeLab Monitor は、ホスト、Docker コンテナ、GPU、systemd サービス、ディスクの状態を 1 ページにまとめるセルフホスト可能なダッシュボードで、読み取り専用の MCP サーバーを内蔵しています。複数のマシンと GPU を運用するホームラボ利用者向けで、エージェントを導入せず SSH 経由でリモートホストを監視します。
主な機能
- 01スロットリング理由とエネルギーコストを含む GPU 状態表示
- 02エージェントなしの SSH によるマルチホスト監視
- 03コンテナ、systemd サービス、ディスクの統合ビュー
- 04HTTP と TCP の稼働監視とプッシュ通知
- 05ラボの状態を公開する読み取り専用の内蔵 MCP サーバー
活用シーン
- 01GPU を占有しているモデルサーバーとそのエネルギーコストの確認
- 02メモリを使用しているコンテナや容量を圧迫しているディレクトリの特定
- 03メンテナンス前にエージェントでラボの状態を要約させる
MCP 対応
同じコンテナ内でポート 9810 の読み取り専用 MCP サーバーを提供し、ホスト、コンテナ、GPU、モデルサーバー、コスト、ディスク、アラートを扱う 19 のツールを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e HOMELAB_MONITOR_URL -e MCP_TRANSPORT docker.io/sikamikaniko123/homelab-monitor:0.14.2HOMELAB_MONITOR_URLBase URL of the running HomeLab Monitor dashboard (e.g. http://YOUR-HUB:9800)MCP_TRANSPORTTransport mode: stdio (default for this package entry) or httpローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
HomeLab Monitor
ホームラボと AI 環境のすべてを 1 ページに — GPU の実態(メーカー不問)、秒間トークン数、時間ごとの電気代、稼働時間、トレーニング実行、コンテナ、ディスク。エージェントも、別個のメトリクススタックも、クラウドも不要です。
ホームラボにマシンが何台か、Pi、そしてなぜかいつも稼働中の GPU が加わり、最近ではモデルも動かすようになった。HomeLab Monitor は、実際に知りたいことに答えるセルフホスト可能なページを提供します。GPU は実際に何をしているのか、どのモデルが GPU を使っているのか、稼働にいくらかかっているのか、どのコンテナが RAM を消費しているのか、ディスクを何が埋めているのか、そして停止中のものはあるのか — Linux、Pi、さらには Windows まで、SSH 経由ですべてのマシンを確認できます。VPN 経由でスマートフォンからも読みやすく表示されます。
はじめに
# Grab the compose file and go. No GPU required — the GPU panels just light up when one's present.
curl -fsSLO https://raw.githubusercontent.com/SikamikanikoBG/homelab-monitor/main/docker-compose.yml
docker compose up -d
http://<your-host>:9800 を開けば完了です。すべてのオプション(ソースからのインストール、GPU ツールキット、Windows/WSL2)→ インストールのドキュメント。
🆕 新機能 — すべてのリリースについて、背景にある理由も含めて詳しく紹介しています:最新リリース · 変更履歴。ダッシュボードには、更新後にリリースノートがアプリ内で一度表示されます。
利用できる機能

1 ページですべてのマシンを確認し、知りたいことを把握できます。定番の機能はすべてそろっており、その上に本格的な AI コックピットが加わります。
ラボのホーム画面 — そして壁掛けディスプレイ。 概要ページを開くと、まず ランチパッドが表示されます。実際によく開くアプリが、正式なロゴ付きのタイルとして並び、コンテナの行からアドレスを入力済みの状態で直接ピン留めでき、グループ分けやドラッグによる並べ替えもできます。ピン留めはブラウザーではなくハブに保存されるため、ノート PC でピン留めすれば、スマートフォンや壁掛け画面にも表示されます。ボード全体が画面に収まります。描画のたびに表示領域からのはみ出しを測り、カードを途中で切ったり画面下にはみ出したりするのではなく、リストを短くし、フリート表示を詰め、ピンを +N 件の下に折りたたむ順に調整します。4K から 1366×768 まで検証済みです。また、⛶ ディスプレイ(または /?display=1。専用のキオスク端末に必要なのはこれだけ)を使うと、余分な表示をすべて取り除いてモニター全体に表示できます。壁掛け画面に表示するパネルは選択でき、Chromium ベースのブラウザーでは、指定した画面でフルスクリーン表示されます。
GPUを解き明かす――どのマシンでも同じタブで。「使用率100%」に張り付いているカードでも、スロットリングが発生していたり、メモリ帯域幅がボトルネックになっていたり、ひそかにクロックが低下していたりすることがあります。GPUタブでは、nvidia-smi のスロットリング理由を読み解き、メモリ帯域幅使用率、コア/メモリクロック、電力と上限の比較、Pステート、そしてファン速度を、コンテナを実行しているマシンだけでなく、フリート内のすべてのマシンで確認できます。複数GPU搭載マシンでは、カードごとにパネルを表示し、メトリクスごとに共通のスケールを使うため、温度の線が高ければ実際にそのカードの温度が高いことがわかります。サーマルスロットリングが発生している時間帯は、スパークライン上で網掛け表示されます。サービスがどのカードで動作しているか(3×3090搭載マシンでは、あるモデルの63 GBがカード全体で合算された値ではなく、22.5/22.1/18.8に分かれて表示されます)、各サービスが消費したエネルギー、カードのスロットリングや過熱、ファンの故障が発生したときのアラートも確認できます。アラートはカードごとに継続的に監視され、ホストごとにしきい値を設定できます。意図的に電力上限を下げているマシンは、その上限に達した状態で動作するのが想定どおりだからです。NVIDIAだけでなく、AMD GPUはLinux上でカーネルの amdgpu インターフェースから直接読み取れます(ROCm不要)。Windowsホスト上のAMDとIntelのGPUにも対応しているため、ベンダーのツールを使わなくても、カード名、使用率、VRAMが表示されます。ドライバーから取得できない情報は、確信ありげにゼロを表示するのではなく、取得できないことが示されます。

プロセス単位でコストを確認。 電力を金額に換算します。マシン単位、コンポーネント単位(GPUは nvidia-smi、CPU/DRAMはRAPLで測定)、そしてプロセス、コンテナ、モデル単位で確認できます。行をクリックすると、任意の期間について消費電力とコストを確認できます。昼夜別料金(Economy 7、Heures Creuses、など)を設定するか、国を選ぶだけで妥当な推定値を取得できます。すべてのワット数は実測値か、設定した基準値です。コンセントでの電力消費を推測することはありません。また、稼働時間ヒートマップでは、数か月分のサンプルを1枚の図にまとめ、ラボの電気代がかかる時間帯を確認できます。曜日×時間の7×24グリッドで、週のどの時間帯が最も高コストかをひと目で把握できます。

トレーニング実行のコストを算出。 Jupyter、Colab、Kaggleから1ファイルのクライアントで実行を送信するか、MLflowからミラーリングすると、損失曲線とともに、実際に消費したGPUエネルギーも同じタイムライン上に表示されます。APIキーは自分で作成、名前の設定、有効期限の設定、取り消しができます。

「動く?」――推測ではなく実測で確認。 Benchmark Labでは、ローカルの各ollamaモデルを実際のカードに読み込み、コンテキストサイズを段階的に変えてテストします。生成トークン/秒とプロンプトトークン/秒、読み込み時間、VRAMからシステムRAMにあふれた量、そしてVRAMに完全に収まる最大コンテキストサイズ――設定する価値のある上限――を記録します。テストするGPUを選択でき(使い捨ての固定ollamaコンテナを使うため、メインのコンテナには一切触れません)、保存済みの実行結果を重ねてカードを比較できます。また、各実行で消費したエネルギーとコストも確認できます。結果は保存されるため、ベンチマークは一度実行すれば、何かが変わったときだけ再実行すれば十分です。

そして、いつもどおりのラボのその他の機能もそろっています:
- コンテナを正直に表示 — ヘルス状態に加え、RAM と VRAM を別々の列に表示します(ページキャッシュではなく、実際に使用中の RAM)。項目をクリックすると、サイドドロワーでログを追跡できます。フリート内のすべてのコンテナで同じ操作が可能です。ログの確認、起動/停止/再起動、再起動ポリシーの設定、ピン留めを、プローブがすでに使用しているものと同じ SSH 接続で行えます。タブ全体はスマートフォンでも動作します。
- systemd サービス — ローカルまたはリモートのサービスを表示し、独自のユニットを強調表示して、失敗したものを先に表示します。
- WizTree スタイルのディスクツリーマップ — フリート内のどのマシンでも。 ハブ または 追加した Linux ホストで、ディスクを占有しているフォルダーをクリックして調べられます。リモートホストのスキャンには、ほかのすべての処理で使用するものと同じ SSH 接続を使うため、リモート側に何もインストールする必要はありません。さらに、コンテナごとの通信量上位プロセスを確認できるネットワーク I/O と、CPU と RAM を消費しているプロセスを確認できる ミニ htop もあります。
- ライブダッシュボードのように動作します。 使用率、RAM、温度、電力は、固定間隔のポーリングではなくプッシュストリーム経由で数秒おきに更新されます。しかも以前より リクエスト数は少なく なっています。負荷の大きい履歴クエリは、そのグラフのバケットに変化があるタイミングでのみ取得され、表示していないタブは一切負荷を発生させないためです。サンプリングと保存の間隔は変更されないため、履歴の密度もコストの精度もこれまでとまったく変わりません。
- SSH によるマルチマシン対応 — マシンごとに鍵を 1 つ貼り付けるだけです。Linux、Pi、さらには Windows にも対応しています。エージェントもインストールも不要です。GPU タブもホストごとに利用できます。リモートのマルチ GPU マシンでは、各カードの VRAM、使用率、電力、温度と、メモリを使用しているプロセスをすべて表示します。
- アップタイム監視を内蔵 — 任意の HTTP エンドポイントまたは TCP ポート(サービス、NAS、リモートサイトなど)をコンテナから直接監視できます。ハートビートストリップ、24 時間/7 日間のアップタイム率、レイテンシ、チェックごとのスマートアラート(フラッピング防止の確認、ダウンタイムを含む復旧通知、任意の応答遅延警告)を備えています。セルフホストするアップタイム監視サービスを別途用意する必要はありません。すでにコンテナに組み込まれています。
- プッシュアラート — Discord、ntfy.sh、Telegram に対応し、状態の変化時にのみ通知するため、通知が大量に届くことはありません。
タブごとの詳しい紹介 → 機能。
2 文でわかるマルチマシン対応
Hosts タブを開き、ハブで自動生成された SSH キーを各リモートホストに貼り付けると、ハブがそのホストのポーリングを開始します。エージェントは不要で、必要なのは SSH と Python 3 だけです(Windows では PowerShell)。ハブは自己完結型の小さなプローブを SSH 経由で実行するため、リモート側には何も残りません。この同じ接続を使って、ハブからリモートの GPU コックピットを開いたり、ディスクをスキャンしたりできます。リモート側へのインストールは引き続き不要です。
初期設定、Windows のセットアップ、セキュリティモデル → マルチマシンのドキュメント。
設定
docker-compose.yml の environment: に以下を設定します(すべて任意です)。
| 変数 | デフォルト | 意味 |
|---|---|---|
SAMPLE_INTERVAL | 10 | サンプルを保存する間隔(秒)。これは保存間隔です。すべてのエネルギーとコストの数値はこの間隔に基づいて積算されるため、変更すると履歴の料金計算も変わります |
FAST_INTERVAL | 2 | 画面上のライブ値を更新する間隔(秒)。負荷の低いカウンターのみを読み取り、何も保存しないため、履歴データも精度も損ないません。0 にするとプッシュストリームが無効になり、ダッシュボードはポーリングに切り替わります |
RETENTION_DAYS | 180 | 履歴を保持する期間 |
PRESSURE_FREE_MB | 2048 | 空き VRAM がこの値を下回ると「圧迫状態」とみなされます |
PORT | 9800 | ダッシュボードのポート |
MCP_PORT | 9810 | 組み込みの読み取り専用 MCP サーバーのポート |
ENABLE_MCP | 1 | 0 にすると、MCP サーバーを起動せずにダッシュボードを実行します |
ENABLE_CONTROLS | 1 | 0 にすると、「Containers」タブと「Services」タブから起動/停止/再起動ボタンを削除します |
ALLOW_SELF_UPDATE | 1 | 0 にすると、アプリ内での更新を無効にします |
WATCH_CONTAINERS | — | OOM のスキャン対象に追加するコンテナー(カンマ区切り) |
WATCH_SERVICES | — | ベンダー提供のものも含め、常に表示する systemd ユニット(カンマ区切り) |
CHECK_UPDATES | true | false にすると、GitHub リリースの毎日の確認を無効にします(外部への通信は行いません) |
CHECK_OS_UPDATES | true | false にすると、保留中の OS パッケージ更新の報告を停止します |
PUBLIC_STATUS | — | 公開ステータスページを有効にする値を設定します(再起動不要の「Settings」切り替えでも設定できます) |
DB_PATH | /data/gpu.db | コンテナー内で履歴を保存する場所 |
HOST_ROOT | /rootfs | 読み取り専用のホストルートのマウントポイント |
DOCKER_SOCK | /var/run/docker.sock | コンテナー情報の読み取り元となる Docker ソケット |
履歴は ./data/gpu.db(バインドマウント)に保存されるため、再起動やアップグレード後も保持されます。アラート、systemd D-Bus のマウント、サーバーごとの調整については、→ 設定ドキュメント をご覧ください。
内部の仕組み
ハブは、nvidia-smi(カーネル内の amdgpu sysfs インターフェースを介した AMD GPU、および組み込み GPU パフォーマンスカウンターを介した Windows ホスト上の AMD/Intel GPU も含む)、Docker API、モデルサーバー API(Ollama、vLLM、llama.cpp、A1111 など)、systemd D-Bus、/proc と /sys の情報をひとつのサンプルビューに統合し、SQLite に保存します。読み取り時にはダウンサンプリングするため、6 か月分の範囲も直近 1 時間分と同じ速さで読み込めます。単一ページ構成で、Chart.js は同梱されており、ビルド手順は不要です。
- 30 種類以上のモデルサーバーを認識 → モデルサーバー
- 標準の
/metricsエンドポイントを使って、既存の任意のダッシュボードにスクレイプできます → メトリクスのエクスポート - データパイプライン全体と呼び出し元の帰属 → 仕組み
AI エージェントを接続する(MCP)
ホームラボの情報を AI エージェントが把握できるようになりました。クライアントから 1 つの URL に接続するだけで、すべてのホスト、コンテナ、GPU、ディスクを確認できます。読み取り専用で、追加設定は不要です。
HomeLab Monitor は、もはや あなた のためのダッシュボードだけではありません。AI エージェントにとってもコンテキストになります。読み取り専用の MCP サーバーが同じコンテナに組み込まれており(:9810 で提供)、Claude、Claude Code、または任意の MCP クライアントが 1 行で接続し、19 個の名前付きツールを使ってラボ全体を調べられます。ダッシュボードと同じ範囲を網羅しており、ホスト、コンテナ、systemd サービス、GPU とその利用者、プロセスごとの RAM 使用量、AI モデルサーバー、インストール済みモデル、コスト、実験の実行履歴、モデルのベンチマーク、ディスクのツリーマップ、履歴、アラートを確認できます。
任意の MCP クライアント(Claude、ChatGPT、または自分のローカル Ollama モデル上で動くエージェント)を接続すると、ホームラボのライブ状態を読み取れます。読み取り専用なので、やり取りはすべて質問と回答です。
# the dashboard is on :9800; the MCP server rides along on :9810
claude mcp add --transport http homelab http://YOUR-HUB:9810/mcp
接続したら、タブを探し回る代わりに、ただ質問するだけです。エージェントが適切なツールを選びます。
- 「GPU が 1 時間ずっと使い切られています。どのモデルサーバーが読み込まれていて、実際に誰が呼び出しているのでしょうか?」
- 「
/backupの容量を使っているのは何ですか? 最大のフォルダーを教えて、異常に増え続けるログらしきものがあれば教えてください。」 - 「今 RAM の空きが最も少ないホストはどれですか? RAM を最も使っているプロセスは何ですか?」
- 「今週末に再起動して OS をアップグレードしたいです。どのマシンを最優先にすべきですか? それぞれで稼働しているものを考慮すると、安全な順序はどうなりますか?」
設計上、読み取り専用です。書き込みツールはないため、エージェントはフリートを確認できても、変更することはできません。ENABLE_MCP=0 を設定すれば、いつでも無効にできます。ツール一覧とセットアップの詳細 → MCP ドキュメント。
セキュリティ
これはホストモニターであり、ホストへのアクセスに加えて、読み書き可能な Docker ソケットと D-Bus ソケット(セルフアップデートと Containers/Services タブの開始/停止/再起動操作はデフォルトで有効です。制限するには ALLOW_SELF_UPDATE=0/ENABLE_CONTROLS=0 を設定するか、docker-compose.readonly.yml を使用して、純粋なモニタリングのみにします)、読み取り専用のルートマウントを使用します。これは意図的に広いアクセス範囲です。ダッシュボード自体にはログイン/認証機能がありません。信頼できる LAN での利用を想定しています。LAN/VPN/ファイアウォールの内側に置き、パブリックインターネットには公開しないでください。 詳細 → ドキュメント。
⭐ プロジェクトを応援する
HomeLab Monitor によってブラウザーのタブが 1 つでも 2 つでも減ったなら、GitHub で ⭐ を付けていただけると、他のホームラボユーザーが見つけやすくなります。本当にありがとうございます!
💬 コミュニティ
一緒に作れば、もっと楽しくなります。HomeLab Monitor の Discord に参加してください。挨拶したり、自分の環境を披露したり、アイデアを交換したり、助けを求めたり、気軽に交流したりできます。ロードマップについての話題や「X を作るべき?」という質問、ちょっとしたサポートが行われる場所で、新しいコントリビューターも温かく迎えられます。
友人を誘ったり、アイデアを投稿したり、issue を作成したりして、親しみやすく健全なホームラボコミュニティを一緒に育てましょう。💛
コントリビューション
issue や PR は大歓迎です。特に、新しいモデルサーバーのプローブ、新しいモニター、GPU バックエンドを歓迎します。これはホームラボ仲間の役に立つことを目的とした趣味のツールです。お互いに思いやりを持ってください。CONTRIBUTING.md を参照してください。
コントリビューター
Issue の報告、PR の作成、ロードマップの策定に協力してくださった皆さんに感謝します。AMD GPU バックエンド全体(DRM fdinfo によるプロセスごとの VRAM の取得と、v0.28.0 でのすべてのパネルとの完全な連携、v0.26.0 での統合メモリー APU における実際の VRAM の取得)は、@andreahaku の貢献によるものです。v0.27.0 のフリート対応モデルレジストリと、v0.23.0 のメンテナンスウィンドウは、@1HazyOne707 の貢献によるものです。v0.27.0 の RAPL による CPU/DRAM 電力の取得と、v0.24.0 の backend/ モジュールツリーのリファクタリングは、@pehota の貢献によるものです。これまでの貢献者の記録については、変更履歴をご覧ください。
ライセンス
MIT — LICENSEをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。