Ubuntu Weekly Recipe

第890回手軽に使えるシンプルな監視サーバー「Beszel」試す

サーバーを運用する上で、現状の負荷状態を把握することは非常に重要です。監視は一般的に、専用の監視システムを利用して行います。OSSであれば、古くはMuninZabbixNagiosなどが有名どころでした。最近ではクラウドとの相性のよい、Prometheusが支配的でしょう。またDatadogNewRelicといった、自前で監視サーバーをホストする必要のない監視SaaSもよく使われています。

本番運用しているサービスであれば、こうした監視システムをきっちりと構築するのが当然です。しかしそこまで大仰なシステムを使わず、⁠今からテストプログラムを動かすので、その間のサーバーの負荷状態をちょっと見たい」といった要望も、開発中やトラブルシューティング中にはよくあります。vmstatやtopコマンドではプリミティブすぎるので、もう少し詳しくメトリクスを見たい。でも本格的な監視システムをわざわざセットアップはしたくない……。そうした用途にちょうどよい、軽量な監視システムといったものが存在します。

Netdataの現状

Netdataは、手軽に使える監視システムのひとつです。Ubuntu 25.04までであれば、APTでnetdataパッケージを入れるだけで動かせます。以下のスクリーンショットはNetdataのWeb UIですが、システムの状態をかなり詳しく、リアルタイムに監視できているのが解るのではないでしょうか。サーバーの状態を確認したいのであれば、これだけで必要十分以上だと言えるでしょう。

$ sudo apt install -U -y netdata
図1 Ubuntu 24.04上で動作しているNetdataのダッシュボード

導入のハードルが低く、非常にお手軽なNetdataでしたが、Ubuntu 25.10以降ではリポジトリから削除されています。現在NetdataはNetdata Cloudとの統合を推進しているのですが、これに対応した新バージョンのWeb UIはクローズドソースであり、プロプライエタリなライセンスで配布されているためです。

オープンソースの軽量監視ツールを求めるユーザーにとっては、代替ツールの検討が必要です。そこで今回は、Netdataからの移行先として注目されはじめているBeszelを紹介します。

Beszelの特徴

Beszelは2024年に登場した、超軽量なオープンソースの監視システムです。使いやすいWeb UIを備えており、設定もシンプルですぐに利用を始められます。また自動バックアップ、マルチユーザー認証、OAuth認証、APIアクセスといった機能も、一通り備えています。そして今時の監視システムらしく、Dockerのコンテナも監視できます。

Beszelの開発は非常に活発で、ほぼ毎週のようにリリースが行われています。

Beszelは、登録されたシステムの情報表示と管理のためのWeb UIを提供する「ハブ」と、システムのメトリクスを収集する「エージェント」で構成されています。一般的な監視システムによくあるアーキテクチャですので、導入に際して迷うところはないでしょう。

ハブとエージェント間の通信は、WebSocketもしくはSSHによって行われます。ハブとエージェントは、どちらもGo言語で書かれたシングルバイナリとして実装されています。どちらもメモリフットプリントが非常に軽量で、筆者が試しに立ち上げた環境では、ハブの使用メモリが11MB、エージェントの使用メモリが4MBでした。

Beszelのインストール

それではUbuntu 24.04のサーバーを用意して、Beszelで自分自身を監視してみましょう。なおこうしたツールをインストールする際は、⁠ホストOSを汚さないか」⁠既存のシステムに悪影響が出ないか」⁠メンテナンスしやすいか」といった点が気になるかと思います。こうした問題は、コンテナを使ってアプリをカプセル化することで解決できます。というわけで今回も、Dockerを使って動かしましょう。

まず以下のコマンドで、DockerとComposeをインストールしてください[1]

$ sudo apt install -U -y docker.io docker-compose-v2

続いてbeszelを動かすディレクトリと、その中にDocker Compose用のYAMLを作成します。以下のコマンドを実行してください。ここではbeszelのバージョンとして、本記事執筆時点(2025年11月末)の最新バージョンである0.16.1を指定しています。将来、より新しいバージョンが登場した場合は、タグを適宜変更してください。なおコンテナの運用に際しては、latestタグは指定せず、明確にバージョンを指定するほうが無難です。

$ mkdir ~/beszel && cd ~/beszel
$ cat > compose.yaml <<EOF
services:
  beszel:
    image: henrygd/beszel:0.16.1
    container_name: beszel-server
    restart: unless-stopped
    ports:
      - 8090:8090
    volumes:
      - ./beszel_data:/beszel_data
EOF

以下のコマンドでコンテナを起動します。

$ sudo docker compose up -d

これでBeszelのハブが起動しました。

管理画面へのアクセス

起動したハブにアクセスしてみましょう。Webブラウザから「http://サーバーのIPアドレス:8090」を開いてください。すると管理者アカウントの作成を促されますので、メールアドレスとパスワードを入力してください。

図2 初回は管理者アカウントを作成する

アカウントの作成ができると、自動的にダッシュボードに遷移します。

図3 Beszelのダッシュボード

ただし、まだハブしか起動しておらず、エージェントが登録されていないため、何も表示されません。続いてエージェントを起動しましょう。

エージェントの追加

Beszelにおけるエージェントの追加方法は、大きく2通りが存在します。ひとつはダッシュボードの右上にある「システムを追加」をクリックして、手動で追加する方法。そしてもうひとつが「ユニバーサルトークン」を使い、エージェントの自己登録を可能にする方法です。今回はユニバーサルトークンを使った方法を紹介します。ハブ側での手動作業が不要になるため、複数のシステムを同時に登録したいような場合にも便利です。

右上にある歯車アイコンをクリックして、設定画面を表示します。ここで左ペインから「トークンとフィンガープリント」をクリックしてください。デフォルトでは「ユニバーサルトークン」が無効になっていますので、スイッチをクリックして有効化します。

図4 ユニバーサルトークンを有効化する

続いてユニバーサルトークンの右側に表示されている「…」ボタンをクリックして、表示されるメニューから「docker composeをコピー」を選択します。すると以下のように、エージェント起動用のcompose.yamlが表示されますので、これをコピーしておきましょう。

図5 compose.yamlをコピーしておく

エージェント用のディレクトリを作成し、compose.yamlを配置しましょう。

$ mkdir ~/beszel_agent && cd ~/beszel_agent
$ cat > compose.yaml
(ここに先ほどコピーしたYAMLをペーストしてから、Ctrl+Dを押す)

なおBeszelがデフォルトで用意するcompose.yamlには、イメージにバージョンのタグが指定されていません。エージェントもハブと同様に、以下のようにタグを指定しておくとよいでしょう。バージョンはハブと合わせてください。

services:
  beszel-agent:
    # ↓ここにタグを追加する
    image: henrygd/beszel-agent:0.16.1

エージェント用のcompose.yamlが用意できたら、以下のコマンドでエージェントを起動してください。

$ sudo docker compose up -d
図6 ユニバーサルトークンを設定したエージェントを起動すると、自動的にシステムが監視対象として追加される

ユニバーサルトークンは、使い回すことができます。そのためbeszel_agentディレクトリを他のサーバーにコピーし、エージェントを起動するだけで、監視対象を増やせます。

図7 別サーバーで、まったく同じcompose.yamlを使ってエージェントを起動してみた例。nginxというシステムが監視対象として追加されているのがわかる

ただしユニバーサルトークンの有効期限は、有効化から1時間です。またハブを再起動すると、時間内であっても無効となります。その場合は再度設定画面から、新しいトークンを有効化してください。

Beszelで監視できる項目

Beszelのダッシュボードから、監視対象のシステム名をクリックしてください。以下のようなグラフが表示されます。

図8 デフォルト状態のBeszelのグラフ

デフォルトでCPU、メモリ、ディスク、ネットワーク、ロードアベレージ等が表示されます。Netdataと比較すると項目は少なく、非常にシンプルですが、その反面わかりやすいとも言えるでしょう。開発環境などであれば、CPUやネットワークの負荷がざっくり見られれば十分なことも多く、あまり細かいメトリクスが大量に表示されても、かえって目ざわりということもあります。

監視項目の追加もできます。ファイルサーバーであれば、データ置き場にしている別のストレージを監視したいこともあるでしょう。具体的な例として、/dev/sdb1を/mnt/shareにマウントして、Sambaで共有しているサーバーがあるとします。この場合、エージェントのcompose.yamlの「volumes:」に、以下の行を追加してください。監視したいターゲット(ここでは/mnt/share)を、コンテナ内の「/extra-filesystems」以下にマウントします。

(...略...)
    volumes:
      (...略...)
      - /mnt/share:/extra-filesystems/sdb1:ro

エージェントを再起動すると、以下のようにsdb1の監視が開始されます。

図9 /dev/sdb1の監視を追加した状態

Dockerコンテナの監視に対応しているのも、今風です。今回構築したサーバーでは、ハブであるbeszel-serverコンテナと、自分自身を監視するbeszel-agentコンテナのふたつが起動しているため、以下のように表示されます。

図10 各コンテナが使用しているメモリから、Beszelの軽量っぷりがよくわかる

コンテナ名をクリックすると、コンテナのログと詳細情報が表示されます。昨今のアプリはコンテナを使って開発することも多いため、監視システムから手軽にコンテナの中を覗けるのはとても便利です。

図11 コンテナの詳細

Dockerではなく、Podmanも監視可能です。その場合はドキュメントを参考に、Podman APIを有効にしてください。対応したエージェントを使えば、GPUの監視も可能です。詳しくはドキュメントを参照してください。また本記事では触れませんが、当然アラート機能も備えています。


Beszelは個人の開発マシン、自宅サーバー、小規模な社内環境などに向いた、非常にシンプルな監視ツールです。Docker Composeだけで動かせるため、導入のハードルも非常に低く、また使い終わったらすぐに捨てられるため、一時的な利用にも向いています。開発環境にWebベースの負荷監視を一時的に入れたい、というような用途にぴったりでしょう。

現在BeszelはDebian側でITPが進んでいる状態です。将来的にUbuntuのリポジトリに入れば、Netdata同様、APTでインストールするだけで自分自身を監視できる状態になるかもしれません。より手軽に使えるようになるため、今後の動向に注目ですね。

おすすめ記事

記事・ニュース一覧