HIRO GEAR
自作開発 RaspberryPi Rust

Raspberry Pi 5 で超軽量ダッシュボードを自作した話 ── Rustによる平常時負荷ゼロ設計

Raspberry Pi 5 で超軽量ダッシュボードを自作した話 ── Rustによる平常時負荷ゼロ設計

自宅で稼働させている Raspberry Pi 5(70番サーバー) は、WordPressやNextcloud、PhotoPrism、AdGuard Homeなど、生活を支える数多くのコンテナをホストしている。

常時稼働のサーバーにシステム監視盤を置く際、一番気になったのが「監視プロセスそのものが常時CPUやディスクI/Oを食い潰す」という本末転倒な事態だった。

そこで、「ブラウザを開いて見ている時だけ動き、普段は完全に沈黙する」 という超省エネ・オンデマンドな監視盤を Rust で自作することにした。

設計の肝:平常時の負荷「完全ゼロ」

今回のダッシュボード「Gonta Command Center」で徹底したのは以下の3点だ。

  1. シングルバイナリへの全内包
    • HTML/CSS/JS をすべて Rust バイナリ内に include_str! で焼き込み、画面表示時の物理ディスク読み込みすらゼロにした。
  2. Server-Sent Events (SSE) によるオンデマンド通信
    • 定期的なバックグラウンドデーモンを走らせず、ブラウザが接続してきた時のみ3秒間隔でカーネル仮想メモリ(/proc, /sys)からデータを吸い上げる。
  3. スマホ画面消灯時の自動休止
    • ブラウザの visibilitychange イベントを拾い、タブが隠れたりスマホがスリープに入った瞬間にSSEを切断する。

[!NOTE] 監視対象となるLVMのSSDキャッシュヒット率(dm-cache)やディスク容量も、初期ロード時やボタン押下時のみオンデマンド取得することで、不要なコマンド実行負荷を徹底排除した。

結果:バイナリわずか2.6MB

ビルドしたバイナリサイズはわずか 2.6MB。メモリフットプリントも数MB程度に収まり、CPU使用率は待機時 0.0% を達成した。

次は、この監視盤から外出先のスマホ経由で Wake-on-LAN を飛ばし、メイン開発PCを指一本で起動・停止できるように連携を進めていく。