hnwの日記

Raspberry Pi+Mackerelで気軽に温度監視できるようにした話

本エントリはMackerel Advent Calendar 2020の4日目の記事です。

私はRaspberry Pi 4を持っているのですが、ヒートシンクが熱々になって心配なので温度監視をする必要性を感じていました。今回Raspberry Pi用のSoC温度を取得するMackerelプラグインを作ってmkrで楽々インストールできるようにしたので、その所感などを紹介します。

Raspberry Pi 4は噂通り熱い

Raspberry Pi 3および4はそれまでの機種より性能が上がった代わりに発熱もひどくなっており、ヒートシンクはほぼ必須、可能ならファンをつけた方がいいとも言われています。

とはいえ自宅で常時起動するならファンレスの方が嬉しいですよね。そこで私は次の写真のようなヒートシンクケースを買いました。これはeBayなどネット通販で買えるもので、送料込みで900円程度でした。見た目としてもボードむき出しよりは随分マシなので気に入っています。

f:id:hnw:20201204230655j:plain
ヒートシンクケースをつけたRaspberry Pi 4

ただ、使っているとどうしても温度が気になります。電源を入れているだけでケース全体が暖かくなりますし、しばらく負荷をかけていると結構熱くなってきます。そもそもこのヒートシンクケース自体どれほどの放熱性能なのかもわかりません(そんなものを買うなという話もありますが)。

Raspberry PiのSoC温度を取るMackerelプラグインを作った

そんなこんなでRaspberry Piの温度監視がしたくなった私はMackerelプラグインを作りました。

これはRaspberry Pi OSのvcgencmdコマンドを利用して、SoC温度・動作クロック・動作電圧・スロットル状態を取得するMackerelプラグインです。

このプラグインを使うとMackerelで次のようなグラフが取れるようになります。

f:id:hnw:20201204211828p:plain
4コア使用時のSoCの温度変化のグラフ

f:id:hnw:20201204211841p:plain
4コア使用時のクロック変化のグラフ

これは4コア全部を使い切ったときのグラフです。それなりに熱くなるのですが、Raspberry Pi用として売られている15mm四方のヒートシンクよりはマシ1であることがわかりました。

Mackerelプラグインはmkr対応しておくと便利

Mackerelプラグインをインストールしたい場合、ソースコードを持ってきてビルドしてバイナリをコピーしてもいいのですが、ちょっぴり面倒ですね。それよりオススメなのがmkrコマンドでビルド済みバイナリをインストールする方法です。例えば今回のプラグインであれば次の手順でインストールできます。

$ wget -q https://github.com/mackerelio/mkr/releases/download/v0.42.0/mkr_0.42.0-1.v2_armhf.deb
$ sudo apt install ./mkr_0.42.0-1.v2_armhf.deb
(略)
$ sudo mkr plugin install hnw/mackerel-plugin-raspberrypi
           Downloading https://github.com/hnw/mackerel-plugin-raspberrypi/releases/download/v0.0.11/mackerel-plugin-raspberrypi_linux_arm.zip
           Installing /opt/mackerel-agent/plugins/bin/mackerel-plugin-raspberrypi
           Successfully installed hnw/mackerel-plugin-raspberrypi

コマンド一発で気軽にインストール・アップデートできるのはいいですね。

mkrコマンドはMackerelのCLIツールで、プラグインインストール機能を持っています。これはGitHub Releaseからプラグインのバイナリファイルを探して最新版をインストールしてくれるものです。GitHub Releaseに公開するzipファイルは命名規則に従っている必要があります。

私はこのzipファイルの作成にGitHub Actionsを利用しています。Gitでv0.0.11のようなタグを打つと複数アーキテクチャのバイナリがビルドされ、GitHub Releaseにファイルが作られるような仕組みになっています。

GitHub Actionsだとバイナリのリリースが楽ちん

GitHubでタグ付けすると自動ビルド・自動デプロイされる仕組みをTravis CIやCircleCIで構築する事例は珍しくありません。私もそうした経験はあるのですが、今回同様の仕組みをGitHub Actionsで作ってみて感動したのはGitHub自身とのインテグレーションの簡単さです。

Travis CIからGitHub Releaseにデプロイしたい場合、GitHubにデプロイキーを登録して秘密鍵を暗号化するなど面倒な手順が必要です。それがGitHub Actionsだと一切手間なしで実現できるのです。GitHub内のやりとりなので簡単なのは当然といえば当然なのですが、この手の作業は頻繁にやるものではないので、精神的なハードルが下がるのは素晴らしいことだと感じます。

また、外部の秘密情報を必要としないので、GitHub Actionsの設定ファイルをコピペするだけで他リポジトリでも使えるのも利点です。Goで書いたMackerelプラグインをお持ちの方は下記ファイルをリポジトリにcommitしてタグを打つだけでmkr対応ができるはずです2

Mackerelプラグインのmkr対応、面倒そうだと思ってやっていなかった人も多いのではないでしょうか。それがコピペ一発で出来るなんて最高じゃないですか?

まとめ

  • Raspberry Piに特化したMackerelプラグインを作成してmkr対応した、気軽に温度監視ができるようになった
  • GitHub Actionsのおかげでバイナリのリリースが超低コストで実現できる、神

  1. 以前はRaspberry Pi 4が手元に2台あったのですが、小さいヒートシンクよりヒートシンクケースの方が5℃くらい低い温度になっていました。

  2. 今回紹介したプラグインとは別リポジトリですが、4アーキテクチャ(386, amd64, arm, arm64)のバイナリをビルドする設定になっているので流用しやすいと思います