データセンターやクラウド環境の温度監視は特にユーザが意識する必要はないけど自社のサーバールームの温度監視は自分たちで何とかするしかない。
毎朝サーバ達は元気にしているか様子を伺いに行くことが出来るのであればそれでも良いかもしれないが、私の場合は複数拠点を一人で見ているので勝手に温度監視してくれるものがあると大変助かります。
今回はUSB温度計を使って、設定した温度の閾値を超えた場合にアラートメールを送信する仕組みを簡単に作ってみます。
準備するもの
今回使用するものは次の通りです。
使い古しのノートPC
以前、Windows7が動いていたPCを再利用して、OSはUbuntuをインストールしてあります。
24時間稼働させて使用するのでサスペンドは無効にしておきます。
ついでに普段使い慣れているPCからSSHで接続できるようにSSHも利用できるようにしておきます。
TEMPer USB温度計
今回のメインアイテムですね。
Amazonで購入できるようです。
値段は1,380円(2021年9月確認)
私は中国在住なのでAmazonではなく、「淘宝」で購入しました。
32元(2021年9月時点のレートで550円くらい)
温度取得
Gitにある温度取得ツールを利用します。
Pythonで作られているので、サーバ(というか使い古しのノートPC)にPythonをインストールしておきます。
apt install python3-serial
Gitからツールを持ってきて、今回の作業フォルダ「/usr/local/src/chktemp」にtemper.pyをコピーします。
※作業フォルダは作成しておいてください。
# cd /usr/local/src # git clone https://github.com/urwen/temper.git # cd temper # cp temper.py /usr/local/src/chktemp
あとこちらのサイトでも記載がありますが、なぜか温度が7℃高く取得されます。
temper.pyのソースを修正しておきましょう。
参考
アラートメール送信
サーバルームの室温が閾値を超えた場合にアラートメールを送信します。
※エラー処理は必要に応じて追加してください。
※ファイル名を「sendmail.py」で作成したと仮定します。
import smtplib import sys from email.mime.text import MIMEText from email.utils import formatdate ' Microsoft Office 365の場合 ' username、passwordは各自の環境に合わせて書き換え smtp_host ='smtp.office365.com' smtp_port = 587 username = 'user@example.com' password = 'password' from_address = 'from-user@example.com' to_address = 'to-user1@example.com, to-user2@example.com' to_list = to_address.split(',') text = "ただ今の室温は" + sys.argv[1] msg = MIMEText(text) msg['Subject'] = 'メール件名を記入 msg['From'] = from_address msg['To'] = to_address msg['Date'] = formatdate() smtp = smtplib.SMTP(smtp_host, smtp_port) smtp.starttls() smtp.login(username, password) result = smtp.sendmail(from_address, to_list, msg.as_string()) smtp.close()
Shellで閾値判定
TEMPerの温度を取得して、閾値を超えていた場合、メール送信するようにします。
※エラー処理は必要に応じて追加してください。
※ファイル名を「monitor.sh」で作成したと仮定します。
#!/bin/bash LIMIT=25 TEMPER=`sudo /usr/local/src/chktemp/temper.py | head -n 1 | awk '{ print $7 }'` OLDIFS=$IFS IFS='.' set -- $TEMPER wkTEMPER=$1 IFS=$OLDIFS if [ $wkTEMPER -ge $LIMIT ]; then python3 /usr/local/src/chktemp/sendmail.py $TEMPER fi
Cron設定
0:00、6:00、12:00、18:00に起動して、温度チェックするようにCron設定します。
crontab -e
00 00,06,12,18 * * * sh /usr/local/src/chktemp/monitor.sh
テストする場合は閾値を「0」など、明らかにサーバルームの室温より低い値に設定してみてください。