Linuxサーバーを監視する場合、しっかりと監視するなら監視対象マシンとは別に監視サーバーを構築して監視ツールを利用するのが一般的ですが、そこまで本格的に監視する必要はないけど、最低限のリソース監視は行いたいという場合があります。
そのようなときは、監視したいマシン自身で、CPUやメモリ、ディスクといったリソースの使用率を取得し、あらかじめ指定したしきい値を上回った(or下回った)ときに、ログに記録したりメールで通知させるといった処理を、シェルスクリプトで実行する方法がおススメです。
そこでここではRedHat互換のLinuxを例に、CPU/メモリ/ディスクそれぞれの使用率を定期的に取得し、指定したしきい値を上回った(or下回った)ときにメール通知させる処理を、シェルスクリプトとcronを使って実現する方法を紹介します。
目次
CPU使用率を監視
CPU使用率を取得するときは、以下の内容でシェルスクリプトを作成します。
シェルスクリプトでは、使用率のしきい値を85%に設定し、しきい値を超えた場合は標準出力にメッセージを表示するよう設定しています。
なお、使用率100%は論理プロセッサ数が2なら「2.00」、4なら「4.00」となり、以下のシェルスクリプトでは、論理プロセッサ数が2のマシンを想定しています。
ちなみに、論理プロセッサ数は「grep processor /proc/cpuinfo | wc -l」コマンドを実行して確認できます。
# vi /usr/local/bin/cpu_check.sh
#!/bin/bash
#CPU使用率のしきい値を100%=2.00で記載
CPU_LIMIT=1.70
#CPU使用率の取得
CPU_USED=`cat /proc/loadavg | cut -d ' ' -f 2`
#CPU使用量がしきい値を超えた場合に通知
if [ `echo "$CPU_USED >= $CPU_LIMIT" | bc` -eq 1 ]; then
echo "$HOSTNAME CPU_Usage Alert: $CPU_USED"
fi
メモリ使用率を監視
メモリ使用率を取得するときは、以下の内容でシェルスクリプトを作成します。
シェルスクリプトでは、使用率のしきい値を80%(80)に設定し、しきい値を超えた場合は標準出力にメッセージを表示するよう設定しています。
# vi /usr/local/bin/memory_check.sh
#!/bin/bash
#メモリ使用率のしきい値を100%=100で記載
MEM_LIMIT=80
#メモリ使用率の取得
MEM_USED=`free | grep Mem | awk '{ print ($2-$7)/$2*100 }'`
#メモリ使用率がしきい値を超えた場合に通知
if [ `echo "$MEM_USED >= $MEM_LIMIT" | bc` -eq 1 ]; then
echo "$HOSTNAME MEMORY_Usage Alert: $MEM_USED %"
fi
ディスク使用率を監視
ディスク使用率を取得するときは、以下の内容でシェルスクリプトを作成します。
シェルスクリプトでは、使用率のしきい値を80%(80)に設定し、しきい値を超えた場合は標準出力にメッセージを表示するよう設定しています。
# vi /usr/local/bin/disk_check.sh
#!/bin/bash
#DISK使用率のしきい値を100%=100で記載
DISK_LIMIT=80
#DISK使用率の取得
DISK_USED=`df / | tail -1 | /bin/sed 's/^.* \([0-9]*\)%.*$/\1/'`
#DISK使用量がしきい値を超えた場合に通知
if [ $DISK_USED -ge $DISK_LIMIT ]; then
echo "$HOSTNAME DISK_Usage Alert: $DISK_USED %"
fi
シェルスクリプトを定期実行する
次に、作成したシェルスクリプトをcronで5分おきに実行するよう設定します。
# vi /etc/crontab
*/5 * * * * root bash /usr/local/bin/cpu_check.sh
*/5 * * * * root bash /usr/local/bin/memory_check.sh
*/5 * * * * root bash /usr/local/bin/disk_check.sh
以上で、シェルスクリプト実行時にしきい値を超えた場合、標準出力にメッセージが表示され、メッセージはシェルスクリプトの実行ユーザーであるroot宛にメール送信されます。
cronで標準出力や標準エラーに表示されたメッセージは、実行ユーザー(ここではroot)宛にメール送信されます。
あとはroot宛メールを外部のメールアドレスなどに転送するよう設定しておけば、何かあったときにいち早く異常に気づくことができるでしょう。
あとがき
小規模環境などで、最小限のリソース監視だけでも行っておきたいときに便利ですよ。ご活用あれ。