Raspberry Piの負荷や温度をモニタするにはNetdataが便利です

netdata Rpi dashboard
Raspberry Pi 4 model Bで遊び始めましたがCPU、メモリや温度の状況をモニターしたいと思いました。できればグラフ表示で。
探せば簡単に見つかるだろうと思ったのですが意外と良いのがありません。
あれこれ試した結果、Netdataがカッコよく表示できて便利でした。


Raspberry Pi 4 model Bを使い始めましたが、まずは処理能力がどのくらいか把握したいです。そのためにはCPUの利用率、メモリー使用量、ディスクI/Oの速度、なによりCPU温度をモニタしたいと思いました。
こんな当たり前なもの探せばすぐに見つかるだろうと思ったのですが・・・ありません!

Raspberry PiはCPU温度のモニタに独自のコマンドを使う必要があるのでLinux汎用のモニタツールはラズパイの温度をモニタできません。ラズパイに対応したモニタツールも当然ありますが、表示できる項目がイマイチだったり、見た目がかっこ悪かったりで使う気になりません。

少しいいなと思ったのを紹介してみます。
本題のNetdataの使い方を見たい方は飛ばしてください。

The Stress Terminal UI: s-tui

s-tui
The Stress Terminal UI: s-tui| GitHub
Stress-Terminal UI, s-tui, monitors CPU temperature, frequency, power and utilization in a graphical way from the terminal.
s-tuiはエストゥイとかストゥイとか読めばよさそう。s-tuiはターミナルでグラフィカルにモニタ表示できます。CPU周波数とCPU温度を表示できます。
ですがモニタできる項目が少なくて寂しいです。テキスト端末で見られるという便利さはありますが使うことは無いでしょう。

Monitorix

Monitorix
Monitorix is a free, open source, lightweight system monitoring tool designed to monitor as many services and system resources as possible. 
httpサーバー内蔵していてブラウザでモニタします。とてもきれいなグラフで表示されます。
ですがRaspberry PiのCPU温度を取得できません。またデータを取得する間隔が数十秒と長いです。リアルタイムモニタというよりも長期間のモニタリングを想定しているようです。安定運用を始めたサーバーとかのモニタに使うようです。

Pythonで作る

Pythonを使いモニタを作ることができます。ライブラリを駆使すればグラフィカルに表示できます。今さら自分で作らなくとも誰かがかっこいいのを作っているだろう…と探しますが全く見当たりません。
基本的にPython嫌いなのでこの線は却下しました。

Netdataがかっこいい

二日ほど探し回ったところ、Netdataが一番良さそうだと思いました。
netdata/netdata  | GitHub
Netdata is distributed, real-time, performance and health monitoring for systems and applications. It is a highly optimized monitoring agent you install on all your systems and containers.
Monitrixと同じようにHTTPサーバーを内蔵していてブラウザでモニタします。Monitrixと違いリアルタイムの表示に適しているようです。Raspberry Piの温度表示に対応しています。
モニタする項目は豊富すぎるくらい有ります。自分でHTMLファイルを作れば好きな項目だけ表示させる事も出来ます。
モニタ表示の最初の方だけ見るとこんな感じです。
netdata
CPU・メモリの利用率、ディスクやネットの転送速度などが表示されています。その下にはCPU利用率がグラフで表示されています。
実際はこれだけではなく下へスクロールすると多くのモニタ項目が表示されています。

そしてNetdataの良いところは公式にdockerイメージがある点です。HTTPサーバーを持つモニタツールなどインストールが面倒だなぁと尻込みしてしまいますが、dockerイメージがあればインストールはとても簡単です。
それではRaspberry Piにインストールしてみます。

Netdataのインストール

まずはRaspberry PiにDockerをインストールしてください。
関連記事:Raspberry PiにDockerをインストールする
インストール用スクリプトを動かすだけなので簡単にインストールできます。

Netdataのdockerイメージはこちらです。
netdata/netdata  | Docker Hub
The official image of netdata - the open-source, real-time, performance and health monitoring.
ドキュメントにある通り次のコマンドを打てばNetdataが動き出します。
docker run -d --name=netdata \
  -p 19999:19999 \
  -v /proc:/host/proc:ro \
  -v /sys:/host/sys:ro \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  --cap-add SYS_PTRACE \
  --security-opt apparmor=unconfined \
  netdata/netdata
もうNetdataが動いています。Raspberry PiのIPアドレスをポート番号19999で開くとNetdataのモニタが見れます。
http://<Your RPi IP address>:19999/
Netdataを止めるには
docker stop netdata
とコマンドを入れます。これでDockerコンテナが止まります。もう一度動かすには
docker start netdata
とコマンドを入れます。

Raspberry Pi用にNetdataをカスタマイズする

Dockerさえ入れておけば1行のコマンドでNetdataが動きます。しかしデフォルトのNetdataではRaspberry Piの温度が表示されません。pluginの設定を変えると表示する事が出来ます。しかしながら設定の変更は少し面倒です。
という事でRaspberry Pi用のダッシュボードを表示するカスタマイズしたDockerfileをGitHubに載せておきました。
SignalFlagZ/Dockerfiles/Netdata-Rpi | GitHub
Netdata for Raspberr Pi with minimal dashboard.
GitHubのプロジェクトが無駄に増えないようにDockerfilesというプロジェクトの下にNetdata-Rpiというディレクトリを作ってNetdata用Dockerfileを置いています。
GitHubはサブディレクトリだけのダウンロードができません。余計なDockerfileがダウンロードされてしまいますがDockerfilesをクローンして持ってきます。
cd ~/Downloads
git clone --depth 1 https://github.com/SignalFlagZ/Dockerfiles.git
Raspberry Pi用にカスタマイズしたNetdataイメージを作成するスクリプトを動かします。
cd Dockerfiles/Netdata-Rpi
./netdata.sh
実行が終わるとNetdataが動いています。先ほどと同じURLを開くと下の方にSensorsという項目が増えているはずです。温度が表示されるまで数十秒かかります。
netdata-sensors
これがRaspberry PiのCPU温度です。

Raspberry Pi用ダッシュボード

Netdataは表示がかっこよくていいのですが表示項目が多すぎです。ラズパイの温度を見るにも表示が下の方にありスクロールがめんどくさい。
という事でRaspberry Pi用のダッシュボードも用意してみました。今度はrpi.htmlを開いてみてください。
http://<Your RPi IP address>:19999/rpi.html
netdata Rpi dashboard
公式のTV.htmlを改造して作りました。
Dockerのイメージとコンテナはrpinetdataとしています。netdataを止めるには
docker stop rpinetdata
としてください。
【2020/1/8 追記: Tinker BoardのTnkerOS v2.0.11でも温度表示できて動きます。ただしrpi.htmlのオーナーとグループをrootにしないとrpi.htmlにアクセスできませんでした。Dockerなのになぜ?】


コメント

  1. 有難うございます。おかげさまでNetdataが動作しました。しかし、Raspberry Pi用ダッシュボードが動作しません。./netdata.shで
    docker: Error response from daemon: driver failed programming external connectivity on endpoint rpinetdata (367d18fe8c7241a1ef00cbaf263e02facd8a2212bf698b1084700a81e0f04549): Bind for 0.0.0.0:19999 failed: port is already allocated.
    が発生しています。何かの操作を間違っているのでしょうか。
    docker stop netdataで停止後、./netdata.shを実行したところエラーは出ませんでした。この場、rpi.htmlは動作しますが、温度は表示されません。ダッシュボードに
    sensors.temp_thermal_zone0_thermal_thermal_zone0: chart not found on url "/api/v1/chart?chart=sensors.temp_thermal_zone0_thermal_thermal_zone0"
    が表示されています。
    尚、Rasp2で動作させています。

    返信削除
    返信
    1. こんにちは!
      同じport番号を使っているプログラムが複数あるみたいです。netdataが2つ動いている可能性があります。netdata.shではrpinetdataという名前のコンテナとイメージは管理しますが、手動で違う名前のコンテナを動かしていないでしょうか?
      温度データが取得されるまで1分以上かかると思って動かしてください。netdataを動かしてから1分後にブラウザを更新して試してください。

      削除
    2. 記事の順番通りにやるとnetdataとrpinetdataの2つが動いちゃうかもしれませんね。ちょっと書き方が悪かったです。
      最後の./netdata.shだけやれば動くはずです。

      削除
  2. 記事の掲載ありがとうございます。
    私もUnknownさんと同じで、センサーが表示されません。
    rebootして docker stats で見てみると rpinetdata だけが動いている状態ですが、rpi.htmlを表示すると、
    sensors.temp_thermal_zone0_thermal_thermal_zone0: chart not found on url "/api/v1/chart?chart=sensors.temp_thermal_zone0_thermal_thermal_zone0"
    と表示されています。
    netdata.sh の実行ではエラーは出ませんでした。
    ラズパイ3B、Stretchで動かしています。

    返信削除
    返信
    1. こんにちは! Netdataのバージョンアップで設定ファイルの様式が変わっていたようです。直すのに数日かかるかもなので当面はDockerイメージのバージョンをv1.19.0にすれば動かせます。
      Netdata-RpiディレクトリのDockerfileをテキストエディタで開きます。一番上の行を次のように修正します。
      FROM netdata/netdata:v1.19.0
      おしりに":v1.19.0"とタグ指定を書きます。
      保存して./netdata.shを動かせば温度も表示されるでしょう。

      削除
  3. こんばんわ。
    早速の返信ありがとうございます。

    今の時点で
    git clone --depth 1 https://github.com/SignalFlagZ/Dockerfiles.git
    してみましたが、Dockerfile に :v1.19.0 の記述はありませんでした。
    (./netdata.sh してもセンサーは表示されませんでした)

    手動で Dockerfile に :v1.19.0 を記述して試しましたが、今度はなぜか rpi.html が not found に。
    だめもとで :v1.20.0 に変更して試したところ、センサーがきちんと表示されました!
    これまで通常のnetdataページにはなかった Sensors の項目も表示されました!

    対応ありがとうございました。

    返信削除
    返信
    1. 連投すみません。
      もしかしたら現在のgitはきちんと修正されていて、私が温度が表示されるまでの数分を待てずに早とちりしたのかもしれません。
      申し訳ありません。

      削除
    2. 動いてよかったです。
      GitHubは修正してあります。cloneかpullで最新版を持ってくれば動くはずです。
      Netdataの最近のバージョンなら動くはずですが、rpi.htmlの所有者とグループに問題が生じアクセスできない場合があるかもしれません。v1.19.0は動くはずなんですけどね。

      削除
  4. 返信ありがとうございます。
    前述の通り、やはり私の早とちりでした。

    好奇心からOSをBusterにして新規からインストールしたのですが、何も問題なく温度が表示されました!

    ありがとうございました。

    返信削除
  5. 自分はMackerelというクラウド活監視サービスを使ってます。死活監視はもちろん温度やメモリに閾値を設定してLINEで警告してくれます。電源容量不足監視のカスタムスクリプトも追加して運用してます。https://qiita.com/tinoue@github/items/868b848999c3571ccf9f

    返信削除
    返信
    1. お仕事なPCの管理には良さそうですね。

      削除

コメントを投稿

最近のコメント

Threaded Recent Comments will be here.