Raspberry Pi スマートホーム化計画 記事一覧
記事の内容を試す場合は自己責任でお願いいたします。
Mackerelを導入してできること
Mackerel: A Revolutionary Server Management and Monitoring Service
With a quick and easy setup, you can be monitoring and managing your servers and visualizing metric data right away with our user-friendly API.
Mackerelは簡単に言うとSaaS型の監視サービスです。
疎通確認やCPU使用率などを監視して問題があるとSlackやメールにアラートを飛ばしてくれます。
クラウド型なので、自宅が停電した場合も問題なく通知が飛んできます。(疎通できないよ!と通知)
他にもカスタムメトリックが使えるので、Raspberry Piで収集した気温などのデータも送信ができ、Webサイト上でグラフとして確認できます。
カスタムメトリックに対してもしきい値を設定することでアラートを飛ばすことができます。
(部屋の気温が一定温度を超えるとアラート、など)
アラートを飛ばす先としてはメールやLINE、Slackなどがあります。
フリーミアムなので、ある程度は無料で使うことができます。
ただし、無料プランではグラフは24時間しか見ることができません。
Mackerelの導入
予めMackerelのサイトから会員登録をしておきます。
Mackerel: A Revolutionary Server Management and Monitoring Service
With a quick and easy setup, you can be monitoring and managing your servers and visualizing metric data right away with our user-friendly API.
次に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なので非常に簡単です。構成構成Raspberry Pi Zero WHBME...
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です。
コメント