Zabbix温度監視 No.03 zabbix_senderでZabbixサーバにデータを送信する

Linuxサーバ上でのUSB温度計の準備が終わったので、後はZabbixにデータを送るだけ。
今回は最初に思いついたzabbix_senderでコマンドの結果をZabbixサーバに送信する方法を紹介します。ただし数年前に作ったスクリプトなので、今見直してみるといろいろお粗末です。

■pcsensorから必要な情報だけを抽出する

pcsensorの結果を見ると一番大事な温度は最終フィールドにあり、摂氏温度の単位「C」が末尾についています。Zabbixで必要なのは温度だけなのでパイプを駆使して情報を整理してみます。

# /opt/pcsensor/pcsensor  -c -d -D0
2015/07/28 22:43:22 Bus 003 Device 074 Temperature0 30.38C

最終フィールドだけを取り出す
# /opt/pcsensor/pcsensor  -c -d -D0  |  awk '{print $NF}'
30.38C

最終フィールドの「C」を消す(「」(空欄)に置き換える)
# /opt/pcsensor/pcsensor  -c -d -D0  |  awk '{print $NF}'| sed -e 's/C*$//'
30.38
■Zabbix_senderを使ったシェルスクリプトを作成する

pcsensorコマンドから温度情報だけを抽出できたので、この値をzabbix_senderを使ってZabbixサーバに送信します。-oで値を指定するのですが、pcsensorの値を1行のコマンド内に組み込む方法が思いつかなかったのでtemp0/temp1で変数定義して値を代入することにします。美しくないやり方ですが、専門家ではないので実現できればいいんです。

また、オプション-vvで詳細なコマンド結果の出力を出力していますが・・・たぶん不要です。検証時に利用していたコマンドをそのままにしてしまったのでしょう。
現在動いているスクリプトなので、例え簡単に修正できるとしても不具合が出ない限りは弄らないのが一番。放置します。

あとUSBTemperは連続したアクセスがあるとKernelを巻き込んでフリーズしてしまうので、温度計0と1の計測にsleepで2秒のインターバルを設けて回避します。この値は1秒でもフリーズ大丈夫なはず。

# vi /root/script/zabbix-thermo.sh#!/bin/bash
cd /opt/pcsensor/

# 温度計0(Bus003)の変数を定義後、zabbix-senderへ出力
temp0=$(./pcsensor -c -d -D0 |  awk '{print $NF}' | sed -e 's/C*$//')
/usr/bin/zabbix_sender -vv -z 127.0.0.1 -p 10051 -s Zabbix登録ホスト名 -k temper0 -o ${temp0} >& /dev/null

# 連続して処理するとkernelpanicが発生するため2秒待つ
sleep 2;

# 温度計1(Bus002) の変数を定義後、zabbix-senderへ出力
temp1=$(./pcsensor -c -d -D1 |  awk '{print $NF}' | sed -e 's/C*$//')
/usr/bin/zabbix_sender -vv -z 127.0.0.1 -p 10051 -s Zabbix登録ホスト名 -k temper1 -o ${temp1} >& /dev/null

exit
■Zabbixにアイテムを登録する

zabbix_senderはZabbixServerにアイテムが登録されていないと通信が完了しません。
ということでZabbix側でアイテムを登録します。この時気をつけるのはタイプ : Zabbixトラッパーにすることと、zabbix_senderの-kオプションで指定した文字列をZabbixアイテムのキーに入力することくらいです。
zabbix_usbtemper-item

■スクリプト

アイテムの登録が済んだらスクリプトを手動実行してZabbixに温度が記録されるか確認します。最初はグラフで表示するよりも、プルダウンの「値」を選択して数値を表示させるほうが分かりやすいです。
zabbix_usbtemper-history
なおzabbix_senderの結果は/var/log/zabbix/zabbix_server.logやzabbix_agentd.logには記録されません。オプション-v-vvでコマンド結果を出力して確かめるのが一番確実です。

■crontabにシェルスクリプトを登録する

スクリプト手動実行結果がZabbixに反映されるようになったら、最後にcrontabに登録します。10分毎に温度を記録したい場合はこのように書きます。

# crontab -e*/10 * * * * /root/script/zabbix-thermo.sh 1> /dev/null 2> /dev/null
次へ続く

一週間収集した室温をグラフ化してみました。土日はエアコンを消すので室温が高止まりし、ONにする平日の日勤帯は約28.2度を維持しているのがわかります。たったの一週間でも分かることが少なくありませんね。
zabbix_usbtemper-temp-week

ただしスクリプト+Zabbix_senderでは温度監視間隔を調整しづらい、ログを残せない、温度センサーを増やす際にスクリプトの修正が必要などいくつか不都合があります。そこで次回はZabbix_agentのUserParameterを利用した監視方法を紹介します。