これから始めるZabbix Sender(2) Raspberry Pi の温度データを送るには?

これから始めるZabbix Sender(2) Raspberry Pi の温度データを送るには?

これから始めるZabbix Sender(2) Raspberry Pi の温度データを送るには? はてなブックマーク - これから始めるZabbix Sender(2) Raspberry Pi の温度データを送るには?


前回は Zabbix Sender を使い、リモートサーバ上の Load Average を Zabbix サーバに送信しました。今回はこの方法を応用し、自宅の Raspberry Pi の温度データをリモートの Zabbix サーバで監視する方法をご紹介します。

■ Raspberry Pi で室温を計測するには?

Raspberry Pi は ARM を搭載した小型省電力コンピュータです。手軽に扱えることから、一昔前の自宅サーバーでできることなら、Raspberry Pi などを使って置き換えることもできます。

例えば、室温のデータを取得するような簡単なことであれば、Raspberry Pi は省電力で場所もとりませんし、何より静かです。室温を計測するには、私の場合は、PCsensor 社のTEMPer1 という USB 接続の温度センサを使ってデータを取得しています。取得方法の詳細は、以下の URL をご覧ください。

セットアップが終われば、Raspberry Pi 上で【 temper 】コマンドを使って、室温が測定できるようになります。

$ sudo temper
08-Jan-2015 13:35,22.102869

このように、取得時の時刻と、温度(摂氏)が約「22度」であることがわかります。

本記事では「 temper 」コマンドを使用していますが、お使いのツールやコマンドによって違います。環境に応じて読み替えてください。

■ Raspberry Pi のデータを Zabbix サーバで監視するには?

コマンドで取得できる温度データを Zabbix で監視するためには、どのようにしたら良いでしょうか。Raspberry Pi 上に Zabbix サーバを設定する方法は楽ですが、外出時に参照するためにはルータで NAT を設定するなどの作業が必要です。何より Raspberry Pi にとって Zabbix Server や MySQL を動かすのは、少々荷が重いです。Zabbix エージェントをセットアップする方法もありますが、こちらもやはりルータの設定を行う必要があります。

このような場合に重宝するのが、Zabbix Sender です。コマンド「zabbix_sender」を使い、リモートの Zabbix サーバに監視データを送信できます。

raspi-zabbix-01

Raspberry Pi のように、エージェントを常駐させておくリソースが勿体ないコンピューター上で有効な手段となります。また、家庭内ネットワークが複雑な場合でも、インターネットとの通信が可能であれば、ルータやファイアウォールの設定を変更しなくてもよいという利点があります。

■ Zabbix サーバ側のアイテム登録

ここでは、室内の温度状況を把握するために、Zabbix サーバ側で温度を記録し、グラフを表示させることを目的とします。準備するのは、温度を取得する「Zabbix トラッパー」タイプのアイテムを作成します。任意のホスト上で、次の画像のように「Zabbix トラッパー」を作成します。ここでは「 Room Temperature 」という名前で、キーは「 room_temp 」としています。データは小数値が入るので「数値(浮動小数)」とし、単位は「C」としています。

raspi-zabbix-02

■ Zabbix Sender の設定を Raspberry Pi で

アイテムを作成したあとは、Raspberry Pi 上の設定です。温度データだけを抽出するスクリプトを作成し、それを cron に登録します。

温度データはコマンド「 temper 」で取得していました。ここで再び「 temper 」の出力内容を確認します。

# /usr/bin/temper
08-Jan-2015 14:01,22.102869

欲しいのは温度だけであり、カンマより前の日時部分は不要です。これを「 cut 」コマンドで加工しますと、次のように温度データが取得できます。

# /usr/bin/temper | cut -f2 -d','
22.102869

これを「 echo 」コマンドを使い、キー名「room_temp」と値を表示できるようにします。

# echo "- room_temp `/usr/bin/temper | cut -f2 -d','`"
- room_temp 22.102869

あとは、この結果を標準出力とし、zabbix_sender を使って Zabbix Server に送信します。このキー「room_temp」と値を zabbix_sender にパイプで渡して処理します。

# echo "- room_temp2 `/usr/bin/temper | cut -f2 -d','`"  | \
    zabbix_sender -z <ZabbixサーバのIPアドレス> -s <Zabbix上のホスト名>  -vv -i -
zabbix_sender [31719]: DEBUG: answer [{
        "response":"success",
        "info":"processed: 1; failed: 0; total: 1; seconds spent: 0.000061"}]
info from server: "processed: 1; failed: 0; total: 1; seconds spent: 0.000061"
sent: 1; skipped: 0; total: 1

このように「processed: 1」と表示されていれば正常です。Zabbix サーバ上で【 監視データ 】→【 最新データ 】を選び、対象アイテムを探すと温度が取得できていることがわかると思います。

次に、今実行したコマンドを cron で毎分自動実行するようにします。

# touch /usr/local/bin/raspi_temp.sh
# chmod 755 /usr/local/bin/raspi_temp.sh
# vi /usr/local/bin/raspi_temp.sh

ファイルの内容は、先ほど実行したものと同じにします。

#!/bin/sh

echo "- room_temp2 `/usr/bin/temper | cut -f2 -d','`"  |  zabbix_sender -z <ZabbixサーバのIPアドレス> -s <Zabbix上のホスト名>  -vv -i -

次に cron に登録します。「crontab -e」で cron の編集画面に移り、次のように入力すると毎分データを送信します。頻繁に送信する必要がなければ、5分おきなどに書き換えます。

* * * * * /usr/local/bin/raspi_temp.sh

あとは、cron が実行されるのを待てば、自動的に Zabbix サーバにデータが送られます。「最新データ」からアイテムの「グラフ」を選択し、次の画面のような温度遷移のグラフが確認できます。

raspi-zabbix-03

次回は、これまでの方法を統合し、nasune の容量をリモートの Zabbix で監視する方法を紹介する予定です。