server-memo.net

ディスク監視スクリプト

      2016/01/22

ディスクの使用量を監視する簡易スクリプトです。

ディスク使用量の監視

とあるシステム(OSはCentOS7.1)でディスク使用量を監視するスクリプトを作成したので、そのときのメモです。

cactiやzabbixをインストールするのは面倒くさいけど、ディスク使用状況は監視したいというときに使っています。
たいしたスクリプトではないのですが、誰かの参考になるかもしれないのでとりあえず公開してみます。

パーティション情報

監視を行っているシステムのパーティションの構成は、以下の通り非常にシンプルな構成です。

# df -h
ファイルシス            サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root    46G  2.3G   44G    5% /
devtmpfs                  1.9G     0  1.9G    0% /dev
tmpfs                     1.9G     0  1.9G    0% /dev/shm
tmpfs                     1.9G   33M  1.9G    2% /run
tmpfs                     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1                 497M  188M  310M   38% /boot

ディスク監視スクリプト

今回は、rootのホームディレクトリ上に「diskcheck.sh」という名前でスクリプトを作成していますが、特にファイル名や作成場所に決まりはありませんので、好きな場所に好きな名前で作成してもらってかまいません。

# vi /root/diskcheck.sh

※今回はrootユーザで作成していますが、特にrootユーザである必要はありません。

スクリプト設定項目

スクリプトで設定が必要な箇所は3箇所です。

  • partition_x 監視するパーティション
  • shikii_x ディスク使用量の閾値を%で設定
  • mailaddress 通知先メールアドレス

スクリプト内容

このスクリプトでは、「/」のパーティションを監視し、ディスク使用率が80%を超えるとメールにて通知をする設定となっています。

#!/bin/sh

# 監視パーティション
partition_1=/dev/mapper/centos-root

# ディスク使用率閾値(%)
shikii_1=80

# 通知先メールアドレス
mailaddress="tamohiko@server-memo.net"

# メール送信用データ
srvname=`hostname`
subject="$srvname Disk space alert"
maildata=`hostname &&  date && df -h`

# ディスクチェック処理
used_1=` df -h | grep $partition_1 | awk '{ print $5 }' | sed -e '$s/.$//' `

# 閾値チェック
if [ $used_1 -lt $shikii_1 ]
  then
    echo ok
  else
    mail -s "$subject" $mailaddress << MAILDATA
$maildata
MAILDATA
fi

複数のパーティションを監視したい場合

監視するパーティションが複数ある場合はその分だけ、下記の部分を追加してスクリプトを作成することで、複数パーティションの監視ができます。

  • 監視パーティション変数 (partition_X)
  • ディスク使用率閾値変数 (shikii_x)
  • ディスクチェック処理処理
  • 閾値チェック処理
#!/bin/sh

# 監視パーティション
partition_1=/dev/mapper/centos-root
partition_2=/dev/sda1

# ディスク使用率閾値(%)
shikii_1=80
shikii_2=60

# 通知先メールアドレス
mailaddress="tamohiko@server-memo.net"

# メール送信用データ
srvname=`hostname`
subject="$srvname Disk space alert"
maildata=`hostname &&  date && df -h`

#ディスクチェック処理
used_1=` df -h | grep $partition_1 | awk '{ print $5 }' | sed -e '$s/.$//' `
used_2=` df -h | grep $partition_2 | awk '{ print $5 }' | sed -e '$s/.$//' `

#閾値チェック1
if [ $used_1 -lt $shikii_1 ]
  then
    echo ok
  else
    mail -s "$subject" $mailaddress << MAILDATA
$maildata
MAILDATA
fi

#閾値チェック2
if [ $used_2 -lt $shikii_2 ]
  then
    echo ok
  else
    mail -s "$subject" $mailaddress << MAILDATA
$maildata
MAILDATA
fi

実行権限設定

作成したスクリプトには実行権限を設定する必要がありますので、忘れずに作業を行ってください。

# chmod 755 /root/diskcheck.sh

実行テスト

スクリプトの作成が完了しましたら、実行テストを行います。

ディスク使用率閾値の値を下げて、チェックに引っかかるようにすることも忘れないようにしてください。

テスト実施結果

今回のテストでは「shikii_1」の値を「1」に設定し、チェックに引っかかるようにしています。

テストを実行する際に「-x」オプションを使用することで、実行内容が表示されるのでうまく動作しない場合についての問題切り分けの手助けとなります。

# sh -x /root/diskcheck.sh
+ partition_1=/dev/mapper/centos-root
+ shikii_1=1
+ mailaddress=tamohiko@server-memo.net
++ hostname
+ srvname=local.server-memo.net
+ subject='local.server-memo.net Disk space alert'
++ hostname
++ date
++ df -h
+ maildata='local.server-memo.net
2015年  9月  1日 火曜日 23:10:24 JST
ファイルシス            サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root    46G  2.3G   44G    5% /
devtmpfs                  1.9G     0  1.9G    0% /dev
tmpfs                     1.9G     0  1.9G    0% /dev/shm
tmpfs                     1.9G   41M  1.9G    3% /run
tmpfs                     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1                 497M  188M  310M   38% /boot'
++ df -h
++ grep /dev/mapper/centos-root
++ awk '{ print $5 }'
++ sed -e '$s/.$//'
+ used_1=5
+ '[' 5 -lt 1 ']'
+ mail -s 'local.server-memo.net Disk space alert' tamohiko@server-memo.net

cronへ登録

スクリプトの試験を行い、意図したとおりに動作することが確認できましたら、今度は
「crontab」へ登録し、定期的にディスクのチェックを行うようにします。

今回は毎時05分にディスク使用量をチェックするように設定してみました。

crontab設定

# crontab -e

設定内容

05 * * * * /root/disk-space-check.sh

これで、ディスク使用量の監視が出来るようになりました:-)

※crontabの詳しい設定方法は、このページにまとめてあります。

 - サーバ運用