Contents

【サーバー管理】 もっと「全部盛り」なシステムモニター「rigtop」を作ってみた話 【ツール紹介】

この記事にはEnglish版もあります。

btopライクなシステムモニター「rigtop(リグトップ)」を作ったので紹介します。 ターミナルで動くTUI版(rigtop)と、ウィンドウで動くGUI版(rigtop-gui)があり、現状、Linux・Windows・macOS(Apple Silicon)で動作確認できています。

https://raw.githubusercontent.com/akivajp/rigtop/main/docs/images/rigtop-tui.png

なんで作ったのか

  • 自分は普段からbtopを愛用していて、WindowsのデスクトップからLinuxのサーバー(GPU付きの作業機やNAS)に ssh してbtopを開くのが毎日の習慣になっています
  • 1画面に全部が並ぶ一覧性はとても気に入っているのですが、使い続けるうちに、自分の使い方では物足りないところが出てきました
    • ストレージの健康状態が見えない: btrfsやmdadmでRAIDを組んでいるので、デバイスごとのエラー回数、RAIDの劣化、SMART、NVMeの温度を一緒に見たい
    • どのプロセスがGPUのメモリを使っているか見えない: 機械学習のジョブを複数のGPUで動かしていると、ここが一番知りたい
    • ホストの数だけターミナルが増える: 何台かを並べて、異常のあるホストだけ目立たせてほしい
    • ターミナルの外でも見たい: ウィンドウの大きさに合わせてパネルを広げたり、長めの履歴を見たりしたい
  • 既存のツールも一通り探しました。Mission CenterなどのGUIモニターは見た目がきれいですが、btopほど一覧性が無く、どれもリモートのホストは見られませんでした
  • それならと、欲しい機能を要件として並べて、自分で作ってみることにしました。開発にはAIのコーディング支援も使っています

どんなツール?

  • btopと同じく、CPU(全体・コアごと・温度)、全GPU、メモリ、ストレージ、ネットワーク、プロセス一覧を1画面に出します。プロセスの終了・強制終了もできます
  • そのうえで、btopに足りなかった部分を足しています
    • ストレージ: btrfsのRAID構成とデバイスごとのエラー回数、mdadmの状態、SMART、NVMeの温度
    • GPU: プロセスごとのVRAMとGPU使用率(NVIDIA)。AMDとIntelのGPUも表示します
    • 電力・ファン: CPU+GPUの消費電力の合計と、ファンの回転数(各系統に好きな名前を付けられる)
    • 複数ホスト: SSH越しに何台でも並べて監視できる
    • ウィジェット: 時計や、好きなコマンドの出力を画面の右端に並べられる
  • GUI版は、btopと同じ配置のまま、パネルの境界をドラッグでリサイズ・並べ替えできます

https://raw.githubusercontent.com/akivajp/rigtop/main/docs/images/rigtop-gui.png

使ってみる

インストール

  • LinuxとmacOS(Apple Silicon)では、ワンライナーで入れられます。~/.local/bin に置くので sudo は要らず、もう一度実行すると最新版に更新されます
$ curl -fsSL https://github.com/akivajp/rigtop/releases/latest/download/install.sh | sh
  • Releases のアーカイブを展開して、バイナリを PATH の通った場所に置くだけでも動きます
  • ほかの入れ方もあります
$ cargo install rigtop rigtop-gui           # Rust の環境があれば
$ sudo apt install ./rigtop_*_amd64.deb      # Debian / Ubuntu 22.04 以降(Releases の .deb)
# Windows(Scoop)
> scoop install https://raw.githubusercontent.com/akivajp/rigtop/main/packaging/scoop/rigtop.json
  • パッケージ管理システム向けの整備はまだまだです。aptのリポジトリやwinget、Homebrewには未登録で、AURもアカウントの新規登録が止まっているため、今はリポジトリ内のPKGBUILDから作る形です

起動する

$ rigtop          # TUI
$ rigtop-gui      # GUI
$ rigtop --demo   # 架空の3台分のデータで操作を試す
  • ほとんどの項目は、追加のソフトもroot権限も無しで表示できます
  • SMARTだけはrootが要るので、rootのsystemdタイマーが10分ごとに集めたファイルを読む形にしています(sudo "$(command -v rigtop)" --install-collector で設定されます)。rigtop自身をrootで動かしたり、デバイスの権限を緩めたりはしません

複数ホストを監視する

# ~/.config/rigtop/config.toml
[[hosts]]
name = "workstation"

[[hosts]]
name = "nas"
ssh = "admin@nas.local"

https://raw.githubusercontent.com/akivajp/rigtop/main/docs/images/rigtop-gui-overview.png

  • 監視される側にもrigtopを入れておけば、手元のrigtopが ssh <ホスト> rigtop --agent を起動して、標準入出力で計測値を受け取ります
    • 常駐プロセスもポート開放も要りません。認証と暗号化はSSHに任せているので、~/.ssh/config や鍵、ProxyJump もいつもどおり使えます
  • ホストが2台以上あると、全ホストを並べたオーバービューから始まり、タブで各ホストの詳細に切り替えます
    • ストレージのエラーや高温など、要注意の項目はカードの先頭に出ます。GUI版は新しい警告をデスクトップ通知でも知らせます(Linux)

ウィジェットを並べる

  • 監視画面と一緒に見たいものを、右端の列に並べられます(上のスクリーンショットの右端)
  • 中身は組み込みの時計か、任意のコマンドです。コマンドが出力したテキスト、または決まった形のJSON(ラベル・値・ゲージ・色)を数秒ごとに表示します
[[widgets]]
name = "Clock"
builtin = "clock"

[[widgets]]
name = "Claude Code"
command = "/path/to/rigtop/contrib/widgets/claude-code/claude-code-widget"
  • 今のところ、自分で作って使っているのは次の2つです
    • 大きな時計: 地味ですが、常に開いている監視画面に時計があるのは便利です
    • Claude Codeの状況: 利用枠(5時間・週)の残りとリセット時刻、稼働中のセッションとサブエージェントの一覧、待機中のセッションが「バックグラウンドの作業待ち」か「こちらの入力待ち」か
      • Claude Codeに作業を任せている間、どのセッションが自分の返事を待っているかがひと目で分かるので、自分ではかなり気に入っています
      • リポジトリの contrib/widgets/claude-code/ に入れてあります(利用枠の表示には、Pro・MaxプランでのClaude Codeのステータスライン設定が要ります)

Windows

https://raw.githubusercontent.com/akivajp/rigtop/main/docs/images/rigtop-gui-windows.png

  • CPU・メモリ・プロセス・ネットワーク・ドライブ・NVIDIAのGPUは、そのまま表示できます
  • 温度・ファン・CPUの消費電力・ドライブの健康状態は、Windowsが標準では読めないので、LibreHardwareMonitor から読み取ります
    • GUI版の「set up…」ボタンを押せば、導入と設定を代わりにやってくれます

協力してくれる方を募集しています

いまのところ、自分の手元の次の環境では快適に動いています(rigtop v0.10.0)。

  • Ubuntu 26.04(Ryzen 9 9950X3D、RTX 4090 + RTX 4000 Ada、NVMe 3台のbtrfs RAID)
  • CachyOS(Ryzen 7 PRO 7840UのノートPC)
  • Windows(Ryzen 9 8945HX + RTX 4090、LibreHardwareMonitor併用)

ただ、一人では確かめきれないところがたくさんあります。

  • macOSで使ってくれる方: Apple Siliconの実機で利用者の方に確かめて頂き、メモリ表示の不具合も報告を受けて直せました(v0.11.0)。ただ自分では実機を持っていないので、温度などのセンサーはまだ確かめられていません(バイナリの署名もしていません)。気づいた点を教えてもらえると助かります

  • Issueを書いてくれる方: センサーが出ない、名前がおかしい、表示が崩れる、など何でも歓迎です。センサー関係は、rigtop --dump-json --pretty の出力を添えてもらえると原因を追いやすいです(ホスト名やプロセス名が含まれるので、気になる部分は伏せてください)

  • 開発に参加してくれる方: Rustで書いています。パッケージの整備(AUR、winget、Homebrew、Nixなど)も大歓迎です

  • GitHub: https://github.com/akivajp/rigtop

追伸

  • macOSでの動作確認と不具合の報告・修正を、Yasu-umi さんにして頂きました。ありがとうございます
  • AI情報を漫画でお届けしている「ゆん茶」さんに、漫画で本ツールをご紹介して頂きました。ありがとうございます
この記事は qiita.com にも掲載しています。