Raspberry Pi Zero WHにMackerelを導入して死活監視と気温などのグラフ化を行う

Raspberry Pi

Mackerelを導入してできること

Mackerel: A Revolutionary Server Management and Monitoring Service
organizing cloud servers through roles and connecting various development tools, Mackerel brings a new kind of application performance management

Mackerelは簡単に言うとSaaS型の監視サービスです。
疎通確認やCPU使用率などを監視して問題があるとSlackやメールにアラートを飛ばしてくれます。

クラウド型なので、自宅が停電した場合も問題なく通知が飛んできます。(疎通できないよ!と通知)

他にもカスタムメトリックが使えるので、Raspberry Piで収集した気温などのデータも送信ができ、Webサイト上でグラフとして確認できます。

カスタムメトリックに対してもしきい値を設定することでアラートを飛ばすことができます。
(部屋の気温が一定温度を超えるとアラート、など)

アラートを飛ばす先としてはメールやLINE、Slackなどがあります。

フリーミアムなので、ある程度は無料で使うことができます。
ただし、無料プランではグラフは24時間しか見ることができません。

Mackerelの導入

予めMackerelのサイトから会員登録をしておきます。

Mackerel: A Revolutionary Server Management and Monitoring Service
organizing cloud servers through roles and connecting various development tools, Mackerel brings a new kind of application performance management

次にRaspberry PiにインストールするエージェントをGithubからダウンロードします。

armhf用を使用します。

Releases · mackerelio/mackerel-agent
mackerel-agent is an agent program to post your hosts' metrics to mackerel.io. - mackerelio/mackerel-agent

適宜最新版を導入すると良いと思います。

Mackerelの導入
$ cd /tmp/
$ wget https://github.com/mackerelio/mackerel-agent/releases/download/v0.68.2/mackerel-agent_0.68.2-1.systemd_armhf.deb
$ sudo apt install ./mackerel-agent_0.68.2-1.systemd_armhf.deb

インストールが完了したら、Mackerelのサイトから提供されるAPIキーをエージェントに導入します。
また、自動起動されるようにsystemdでenableにしておきます。

$ sudo mackerel-agent init -apikey="apiキーを入れる"
$ sudo systemctl enable mackerel-agent
$ sudo systemctl start mackerel-agent

Mackerelのサイトを見て、ホストが追加さていれば成功です。

自動的にCPU使用率やメモリ使用率をグラフ化してくれます。

死活監視を試す

Mackerelエージェントが導入されている状態で、Raspberry Piの電源を落としてみます。
しばらくするとMackerelから通知が来ます。

CRITICAL raspberrypi unreachableと来てます。
電源を落としたときだけでなく、処理が停止してフリーズしたときなどもメールが来ます。

復帰させるとこのようにOKとメールが来ます。

他にもCPU使用率などいろいろな情報からアラートを発生させることもできます。

カスタムメトリックの追加

Mackerelでは自動収集される情報以外にも自分の好きなデータを送ることができます。
今回はCPU温度を送信してみます。

詳しい内容は公式のマニュアルを見ると良いです。

CPU温度のグラフ化

CPU温度はRaspberry Piが自動的に計測しているので、特に準備することはありません。

Mackerel形式のデータを出力するスクリプトを作ります。

適当なフォルダにシェルスクリプトを書いてください。

cputemp.sh
#!/bin/bash

TIME=`date '+%s'`
NAME='temperature.cpu'
TEMP=`cat /sys/class/thermal/thermal_zone0/temp`
VALUE=`echo "scale=3; ${TEMP} / 1000" | bc`

echo -e "${NAME}\t${VALUE}\t${TIME}"

実行権を付与し、実行するとタブ文字区切りで名前、CPU温度、時間が出力されればOKです。
CPU温度は1000倍されているので、1000で割っています。
また、時間はUNIX時間です。

$ ./cputemp.sh
temperature.cpu	54.768	1600743541

これでMackerel形式でCPU温度を出力するスクリプトができました。
あとはこれをMackerelに登録してあげます。

mackerelのコンフィグを編集します。

コンフィグの編集
$ sudo vi /etc/mackerel-agent/mackerel-agent.conf

最下部に以下のように追加します。

[plugin.metrics.cputemp]
command = "/opt/mackerel/cputemp.sh"

plugin.metrics.の部分は固定で、cputempとなっている部分は自由に設定できます。
commandの部分には先ほど作成したCPU温度を出力するコマンドをフルパスで指定します。

Mackerelにコンフィグを認識してもらうために、エージェントの再起動を行います。

$ sudo systemctl restart mackerel-agent.service

再起動後にしばらくたってMackerelにグラフ化されていれば完成です。

 画像ではCPU温度と部屋の気温が一緒に表示されています。

CPU温度と部屋の気温が完全に連動していることがわかります。
サーバルームなどがキンキンに冷やされている理由が明らかですね。

BME280で取得したデータをMackerelでグラフ化

次はBME280で取得したデータ(気温、湿度、気圧)をグラフ化してみます。

Raspberry PiとBME280を利用して気温、湿度、気圧を測定する
今回はRaspberry Piと温湿度気圧測定モジュールを利用してデータの取得を行います。BME280は1つのモジュールで温度、湿度、気圧が測定可能で、接続もI2Cなので非常に簡単です。構成構成Ras...

bme280で取得したデータをMackerel形式に変換するスクリプトを書きます。

bme280.pyは以前の記事で作成したものです。
別に気温や湿度などの情報が取得できれば、何でもいいです。

bme280.sh
#!/bin/bash

bme280py_path="/opt/bme280/bme280.py"

SECONDS=`date '+%s'`

if [ $# = 1 ]; then
	if [ $1 = "temp" ]; then
		VALUE=`python3 ${bme280py_path} | awk '{if ($1 == "temperature"){print $3}}'`
		NAME='temperature.room'
	elif [ $1 = "humi" ]; then
		VALUE=`python3 ${bme280py_path} | awk '{if ($1 == "humidity"){print $3}}'`
		NAME='humidity.room'
	elif [ $1 = "pres" ]; then
		VALUE=`python3 ${bme280py_path} | awk '{if ($1 == "pressure"){print $3}}'`
		NAME='pressure.room'
	else
		echo "usage: $0 {temp|humi|pres} "
		exit -1
	fi
else
	echo "usage: $0 {temp|humi|pres} "
	exit -1
fi

echo -e "${NAME}\t${VALUE}\t${SECONDS}"

以下のようにタブ文字区切りでデータが出力されればOKです。

pi@raspberrypi3:/opt/mackerel $ ./bme280.sh
usage: ./bme280.sh {temp|humi|pres}
pi@raspberrypi3:/opt/mackerel $ ./bme280.sh temp
temperature.room	29.94	1600745786
pi@raspberrypi3:/opt/mackerel $ ./bme280.sh humi
humidity.room	49.97	1600745789
pi@raspberrypi3:/opt/mackerel $ ./bme280.sh pres
pressure.room	964.48	1600745793

名前の部分をtemperature.roomとしているので、temperature.cpuとしているCPU温度とグラフが共通になります。別の名前にすれば別グラフとなります。

あとはCPU温度のときと同様にMackerelのconfに記述します。

コンフィグの編集
$ sudo vi /etc/mackerel-agent/mackerel-agent.conf

最下部に以下の記述を追記します。

[plugin.metrics.roomtemperature]
command = "/opt/mackerel/bme280.sh temp"
[plugin.metrics.roomhumidity]
command = "/opt/mackerel/bme280.sh humi"
[plugin.metrics.roompressure]
command = "/opt/mackerel/bme280.sh pres"

Mackerelにコンフィグを認識してもらうために、エージェントの再起動を行います。

$ sudo systemctl restart mackerel-agent.service

Mackerelのサイトを確認して追加したメトリックのグラフが現れていればOKです。

コメント

タイトルとURLをコピーしました