シングルボードコンピュータの温度をNagiosで監視する
2回目の投稿です。今回は、シングルボードコンピュータのCPU温度をNagiosで監視するためのスクリプトです。Nagiosだけではなく、監視対象側でcheck_nrpeを使ったコマンドが動いていることが必要です。
もっとキレイに書けると思いますが、シェルスクリプトは初めてなのでご容赦ください。
そもそも、Rock64で温度を表示するには
cat /sys/class/thermal/thermal_zone0/temp
を使います。ただし、なぜか数字5桁で戻ってきてしまいます。これは、小数3位までの温度表示となっていて、例えば「27621」であれば「27.621度」ということになります。
参考サイト:https://forum.pine64.org/showthread.php?tid=6645
これを、シェルでNagiosのプラグインにしてみました。温度の警告範囲をシェルの引数からもらって設定するのもよいかとは思いましたが、それほどこだわる必要もないと思ったので、40度までは正常、60度まではWARNING、それより大きくなればCRITICALと設定することにしました。
(空冷式(むきだし)のシングルボードなので、今回の設定値にしましたが、今後、状況を見て見直していきます)
ということで、初めてのシェルスクリプトでのコードです。初めてなので、あちこち参考にしました。ありがとうございます。
参考サイト:
https://qiita.com/egawa_kun/items/196cd354c0d8e4e0fefc
https://pingubrog.exblog.jp/15934437/
監視される側(監視対象ノード)の設定
チェックスクリプト
#!/bin/sh
temp1=$(cat /sys/class/thermal/thermal_zone0/temp)
tempA=`echo "scale=3; $temp1 / 1000 " | bc `
echo "Temp is ${tempA} "
if [ "$(echo "$tempA >= 60" | bc )" -eq 1 ]; then
exit 2;
elif [ "$(echo "tempA >= 40" | bc )" -eq 1 ]; then
exit 1;
else
exit 0;
fi
導入方法
cd /usr/lib/nagios/plugins
sudo vi ./check_thermos.sh
(上記のコードをコピーして貼り付け)
sudo chmod a+x ./check_thermos.sh
監視される側(監視対象ノード)のnrpe.cfgに、以下の項目を追加します。
command[check_thermo]=/usr/lib/nagios/plugins/check_thermo.sh
完了したら、nrpeを再起動してください。
監視する側(Nagiosサーバ)側の設定
command.cfgに以下の項目を追加します。
define command {
command_name check_thermo
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_thermo
}
次に、監視定義ファイルに以下の定義を追加します。
define service{
use generic-service
host_name 192.168.***.*** #監視対象のホスト名を入力します。
service_description Temperature
check_command check_thermo
}
これで、NagiosのPre-Flight checkを通してから、Nagiosを再起動すると、温度が監視対象となります。
おまけ
RockPro64の場合は、thermal_zone1もあるので、2個のセンサーから情報を取得することができます。ただ、どういう条件を設定すべきなのか、というのは判断が必要です。
- 平均値を取る、という考え方もありますが、負荷にバラツキがあると、平均値にダマされてしまいます。
- このため、高い方と低い方の温度差を監視の対象にする、という考え方もあります。一方に負荷が寄っているということになるので、監視することに意味はあります。
- 高い方で判断する、という考え方もあります。温度での警告という趣旨を踏まえれば、こちらの考え方が良いのかもしれません。
- そもそもセンサーが2個あるのであれば、両方の温度を監視対象にする、というのが正しいような気もします。
他のシングルボードでも、温度センサーがあれば同じように監視は可能です(おそらく、上記のコードのcat以下の部分を当該コマンドに変更するだけで大丈夫でしょう)。