LinuxでCPU/メモリ/ディスクの使用率をCronとシェルスクリプトで監視する方法

LinuxでCPU/メモリ/ディスクの使用率をCronとシェルスクリプトで監視する方法

Linuxサーバーを監視する場合、しっかりと監視するなら監視対象マシンとは別に監視サーバーを構築して監視ツールを利用するのが一般的ですが、そこまで本格的に監視する必要はないけど、最低限のリソース監視は行いたいという場合があります。

そのようなときは、監視したいマシン自身で、CPUやメモリ、ディスクといったリソースの使用率を取得し、あらかじめ指定したしきい値を上回った(or下回った)ときに、ログに記録したりメールで通知させるといった処理を、シェルスクリプトで実行する方法がおススメです。

そこでここでは、CentOS 7を例に、CPU/メモリ/ディスクそれぞれの使用率を定期的に取得し、指定したしきい値を上回った(or下回った)ときにメール通知させる処理を、シェルスクリプトとcronを使って実現する方法を紹介します。

LinuxでWebサイトの状態をcronとシェルスクリプトで監視する方法
ここでは、Linux(CentOS 7)でWebサイトの状態を監視する方法として、pingコマンドやcurlコマンドとcronを使って実現する方法を紹介します。

この記事は、以下の環境での動作結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
CentOS Linux7.9.2009

CPU使用率を監視する

CPU使用率を取得するときは、以下の内容でシェルスクリプトを作成します。

シェルスクリプトでは、使用率のしきい値を85%に設定し、しきい値を超えた場合は標準出力にメッセージを表示するよう設定しています。

Memo

なお、使用率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宛にメール送信されます。

Memo

cronで標準出力や標準エラーに表示されたメッセージは、実行ユーザー(ここではroot)宛にメール送信されます。

あとはroot宛メールを外部のメールアドレスなどに転送するよう設定しておけば、何かあったときにいち早く異常に気づくことができるでしょう。

あとがき

小規模環境などで、最小限のリソース監視だけでも行っておきたいときに便利ですよ。

ご活用あれ。