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...
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...
次に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です。
コメント