koh’s blog

Sys Admin who loves automation

ラズパイをMackerelで監視してCPU温度をグラフ表示する

先日ラズパイを購入して動かし始めているのですがこっそり再起動してたりと安定感がない状態です。
Raspberry Pi3 Model B+ 導入メモ

またCPU温度がやや高めな(気がする)のでMackerelを使用して監視と温度をグラフ表示できるようにしていきます。

監視設定

個人で持っているMackerelの無料アカウントを使用します。
アカウントの取得の仕方は公式ページを参照ください。
Mackerelをはじめる

エージェントインストール

インストールに関してはこちらの記事を参考にさせていただきました。
MackerelでRaspberry Piをモニタリング(死活監視)してみる

apt-getでのインストールはできないためcurlでパッケージを取得してきてインストールします。

# パッケージ取得
$ curl -O https://mackerel.io/file/agent/deb/mackerel-agent_latest.all.deb
# インストール
$ sudo dpkg -i mackerel-agent_latest.all.deb

configにapikeyを設定します。apikeyはMackerelのコンパネから確認してください。

pi@raspberrypi:/etc/mackerel-agent $ diff mackerel-agent.conf{,.example}
4c4
< apikey = "コンパネから取得したapikey"
---
> # apikey = ""
pi@raspberrypi:/etc/mackerel-agent $

このままだとバイナリがi386用なので起動に失敗します。

pi@raspberrypi:/etc/mackerel-agent $ sudo systemctl start mackerel-agent
Job for mackerel-agent.service failed because the control process exited with error code.
See "systemctl status mackerel-agent.service" and "journalctl -xe" for details.
pi@raspberrypi:/etc/mackerel-agent $

pi@raspberrypi:/etc/mackerel-agent $ tail /var/log/mackerel-agent.log
/etc/init.d/mackerel-agent: 43: /etc/init.d/mackerel-agent: /usr/bin/mackerel-agent: Exec format error
pi@raspberrypi:/etc/mackerel-agent $

ARM用のバイナリを別途取得してきます。

pi@raspberrypi:~ $ wget https://github.com/mackerelio/mackerel-agent/releases/download/v0.60.0/mackerel-agent_linux_arm.tar.gz
 
pi@raspberrypi:~ $ tar zxvf mackerel-agent_linux_arm.tar.gz
mackerel-agent_linux_arm/
mackerel-agent_linux_arm/CHANGELOG.md
mackerel-agent_linux_arm/LICENSE
mackerel-agent_linux_arm/LICENSE.rtf
mackerel-agent_linux_arm/README.md
mackerel-agent_linux_arm/mackerel-agent
mackerel-agent_linux_arm/mackerel-agent.conf
pi@raspberrypi:~ $

pi@raspberrypi:~ $ sudo cp mackerel-agent_linux_arm/mackerel-agent /usr/bin/mackerel-agent
pi@raspberrypi:~ $

再起動すると起動に成功しました。

pi@raspberrypi:~ $ sudo systemctl restart mackerel-agent
pi@raspberrypi:~ $ sudo systemctl status mackerel-agent -l
● mackerel-agent.service - LSB: 'mackerel.io agent'
   Loaded: loaded (/etc/init.d/mackerel-agent; generated)
   Active: active (running) since Sat 2019-07-20 13:25:04 JST; 2s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 6900 ExecStart=/etc/init.d/mackerel-agent start (code=exited, status=0/SUCCESS)
    Tasks: 15 (limit: 2200)
   Memory: 2.4M
   CGroup: /system.slice/mackerel-agent.service
           ├─6904 /usr/bin/mackerel-agent supervise --pidfile=/var/run/mackerel-agent.pid --root=/var
           └─6913 /usr/bin/mackerel-agent --pidfile=/var/run/mackerel-agent.pid --root=/var/lib/macke

Jul 20 13:25:01 raspberrypi systemd[1]: Starting LSB: 'mackerel.io agent'...
Jul 20 13:25:04 raspberrypi mackerel-agent[6900]: Starting mackerel-agent:.
Jul 20 13:25:04 raspberrypi systemd[1]: Started LSB: 'mackerel.io agent'.
pi@raspberrypi:~ $

画面から確認してもホストが追加されていることが確認できます。
しばらくするとLoadAvgやcpuなどLinuxの所要なmetricは自動で取得してくれています。

f:id:koh-sh:20190720152726p:plain f:id:koh-sh:20190720152739p:plain

温度取得

Mackerelでは自作のメトリックを自由に追加することができます。
これを利用してCPU温度を表示するメトリックを作成していきます。
こちらの記事を参考にさせていただきました。
Mackerel のカスタムプラグインを作るのは実は簡単だよという話

作成したスクリプトは下記になります。
bcコマンドがなければapt-getでインストールします。

pi@raspberrypi:~ $ cat /etc/mackerel-agent/thermal.sh
#!/bin/bash

metric_name="raspi.temperature_metric.number"
metric=$(echo "scale=1;$(cat /sys/class/thermal/thermal_zone0/temp)/1000"|bc -l)
date=`date +%s`

echo -e "${metric_name}\t${metric}\t${date}"
pi@raspberrypi:~ $

mackerel-agent.confに追記します。

pi@raspberrypi:/etc/mackerel-agent $ diff mackerel-agent.conf{,.example}
4,7c4
< apikey = "コンパネから取得したapikey"
<
< [plugin.metrics.raspi_temperature]
< command = "/etc/mackerel-agent/thermal.sh"
---
> # apikey = ""
pi@raspberrypi:/etc/mackerel-agent $

再起動して反映させます。

sudo systemctl restart mackerel-agent

するとグラフが追加されています。

f:id:koh-sh:20190720173250p:plain

まとめ

取り急ぎ最低限の監視ができました。
ここまで無料で設定できるのは嬉しいですね。

とりあえずメトリック取れるようになったので再起動や高温のトラシューが捗りそうです。