株式会社エスロジカル
株式会社エスロジカル
セキュリティ、Web開発、Unix開発、Go言語

■ システム運用TIPS:ディスク使用量の監視

技術ドキュメント目次 -> システム運用TIPS -> ディスク使用量の監視

本技術ドキュメントは、ここしばらくメンテナンスをしておりません。
内容が古くなっている可能性などございますこと、ご理解を頂けますようお願いいたします。


サイフにやさしいSSL証明書
【低価格SSL証明書】弊社運営の低価格SSL証明書販売サイト、翌月末払いなど請求書払いも可能。


dfコマンドは、
下記のようにパティションごとのディスク使用率を出力します。

(dfコマンドの出力例:NetBSD)

$ df -k
Filesystem  1K-blocks     Used    Avail Capacity  Mounted on
/dev/wd0a      525814    30320   469203     6%    /
/dev/wd0e    56547854  1520236 52200225     2%    /usr
kernfs              1        1        0   100%    /kern
$


システムの運用中には、ディスクの使用率が上昇しすぎていないかの監視を行う必要がありますが、
dfの出力結果の Capacity のところに記述されたパーセンテージを、
いつも目で確認しているのはすこしおっくうでし、急激なディスク使用率の増加に、
対応できなくなってしまう可能性ができてしまいます。

ですので、
以下のようなPerlの監視スクリプトを作成し、
スクリプトの中で dfコマンドの出力結果を監視するようにし、
そのスクリプトを 下の例のように crontab に登録しておくことで、
ディスク容量監視の自動化ができるので便利です。

監視スクリプトは、異常を発見すると標準出力にその旨を出力するので、
crontab のパイプ指定したコマンドで、その出力を拾って処理しています。

なお、
異常時に管理者にメールで通知がされるようにしておく際には、
メールが正常に流通することが保証されていることが望ましいです。
(異常が発生し、メール通知されても、そのメールが管理者のもとに届かなければ、
 管理者は異常に気づくことができないので、監視する意味がなくなってしまいます。)

◆ ディスク監視スクリプト(Perl)

my @wk = split(/[\s\t]+/, $_);
my $device  = $wk[0];
my $percent = $wk[4];
.....
といったところが、df コマンドの出力結果を抽出している処理になりますが、
OSやバージョンによって、標準で実装されている df コマンドの出力結果に差異があるため、
お手元の環境にあわせて改造してください。

#!/usr/pkg/bin/perl

# Copyright (C) 2006 Slogical Corporation

use strict;

my $p = $ARGV[0];
if ($p !~ /^[0-9]+$/ || $p < 0 || $ p > 100) {
        print STDERR "syntax error: 1st arg must be int value(0-100).\n";
        exit -1;
}

my $ERRMSG="";

open(DF, "/bin/df -k |");
while (<DF>) {
        chomp($_);
        my @wk = split(/[\s\t]+/, $_);
        my $device  = $wk[0];
        my $percent = $wk[4];
        my $mount   = $wk[5];
        $percent =~ s/%//;

        if ($device =~ /\/dev/) {
                if ($percent > $p) {
                        $ERRMSG .= "device $device ($mount) useage is $percent %.\n"
                }
        }
}
close(DF);

print $ERRMSG;

exit 0;


◆ crontab登録例

cron への登録例は、次のようになります。

## ディスク使用量が75%を超えるパティションが存在したら、
## root宛てのメールで通知する。
*/10 * * * * perl df.pl 75 |mail root

## ディスク使用量が75%を超えるパティションが存在したら、syslog に出力する。
## swatch 等のツールで管理者に通知されることを想定とします。
*/10 * * * * perl df.pl 75 |logger




■ システム運用TIPS についての他のドキュメント


■ 他のグループのドキュメント

Apache  /  Linux  /  FreeBSD  /  OpenSSL  /  Perl  /  HTTPプロトコル  /  Jakarta Tomcat  /  Java  /  NetBSD  /  Oracle  /  PostgreSQL  /  UNIX の C言語  /  UNIX のコマンド  /  Windows  /  bind  /  システム運用TIPS

アンケートにご協力をお願いいたします。

1. このドキュメントへの評価をご選択ください。
         

2. ご感想をお書きください。