mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

Linux - ディスク使用量監視&メール通知!

[ サーバ構築 ] [ CentOS, Linux, bash, シェル ]

こんばんは。

Linux サーバで、ディスク使用量を監視しパーティションの残容量が少なくなった場合にメール通知する設定についてです。

そういうことは munin 等のサーバ監視ツールでもできますが、当方が以前から使用している方法(シェルスクリプト&cronを使用する方法)を紹介します。

0. 前提条件

  • CentOS 6.5 での作業を想定。
  • GNU bash, version 4.1.2(1)-release での動作を確認。
  • パーティションを細かく分割していることを想定。
  • 複数パーティションのうち1つでも設定した使用量を超えたらメール送信する。
  • 警告検知時にメール送信するので、SMTP サーバ構築済みで mail コマンドも使用できるようになっている。

1. シェルスクリプト作成

以下のように Bash スクリプトを作成する。

  • このスクリプトでは、複数あるパーティションの1つでも使用量が 90% を超えたらメール通知するようにしている。
  • このスクリプトでは、root ユーザ宛てにメール送信するようにしているが、特定のメールアドレに設定してもよい。
check_df.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash

# 閾値(%)
LIMIT=90
# メール件名
SUBJECT="[WARN] The capacity of the disk has decreased! - `hostname`"

# df コマンドの結果を1行ずつチェック
while read LINE
do
    # パーセンテージ取得
    PER=`echo $LINE | sed 's/^.* \([0-9]*\)%.*$/\1/'`
    # 閾値を超えたら df コマンドの内容をメール送信
    if [ $PER -gt $LIMIT ]; then
        df -h | mail -s "$SUBJECT" root
        break
    fi
done < <(df | grep '[0-9]\{1,\}%')

2. シェルスクリプト権限設定

作成した Bash スクリプトに実行権限を付与する。

1
# chown 700 check_df.sh

3. シェルスクリプト実行

試しに、作成した Bash スクリプトを実行してみる。(試験的に閾値の設定を下げて)

1
# ./check_df.sh

成功すれば、件名が “[WARN] The capacity of the disk has decreased! - <サーバホスト名>"、本文が以下のような df コマンドの実行結果のメールが指定の宛先に届くはずである。

1
2
3
4
5
6
7
8
9
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       2.0G  587M  1.3G  31% /
tmpfs           500M     0  500M   0% /dev/shm
/dev/sda1       194M  112M   73M  61% /boot
/dev/sda9       234G   25G  197G  12% /home
/dev/sda8       2.0G   74M  1.8G   4% /tmp
/dev/sda6       9.9G  2.0G  7.4G  22% /usr
/dev/sda7       5.0G  3.0G  1.7G  65% /usr/local
/dev/sda5        40G   14G   24G  37% /var

4. 定期実行設定

自動で定期的(毎時)に実行するために “/etc/crond.hourly/” ディレクトリへ移動する。

1
# mv check_df.sh /etc/crond.hourly/

これで、毎時チェックが行われ、容量が設定した閾値を超えたパーティションがあればメール送信される。


別の方法やサーバ監視ツール等を使用する方法もあるでしょうが、当方はこれで落ち着いています。

以上。

Comments