仕様
dfの値のなかで50%を越えているファイルシステムがいたら警告する
bashではじめる
$ df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg_fri-lv_root
39720352 6285108 33031792 16% /
tmpfs 1544216 1452 1542764 1% /dev/shm
/dev/sda3 198337 55464 132633 30% /boot
これをパイプでつないでgrep
$ df -k | grep "30%"
/dev/sda3 198337 55464 132633 30% /boot
標準出力に出るので、mail設定したcron書いてやればいいんでないの?という投げやりなかんじ
ただ、ためしに下記ファイルを作ってみたら
$ cat disk_alert.sh
/bin/df -k \
| /bin/grep -E "[1-9].%"
$ /bin/bash ./disk_alert.sh
39720352 6284960 33031940 16% /
/dev/sda3 198337 55464 132633 30% /boot
こういう結果になった
長い名前が改行されてそれをgrepしているので。
$ cat disk_alert.sh
/bin/df -k -P \
| /bin/grep -E "[1-9].%"
$ /bin/bash ./disk_alert.sh
/dev/mapper/vg_fri-lv_root 39720352 6284956 33031944 16% /
/dev/sda3 198337 55464 132633 30% /boot
よさそう。数字をしきい値まであげる
$ cat disk_alert.sh
#!/bin/bash
MAILTO=root
/bin/df -k -P \
| /bin/grep -E "[5-9].%"
こんな。
ただ実行しても今50%越えているものないので何も起きない。
確かめてみる。
$ dd if=/dev/zero of=full.img bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.0336465 s, 312 MB/s
$ ls -al
total 10256
drwxrwxr-x. 3 sane sane 4096 2010-03-05 02:05 .
drwxr-xr-x. 13 sane sane 4096 2010-03-05 01:28 ..
-rw-rw-r--. 1 sane sane 65 2010-03-05 01:57 disk_alert.sh
-rw-rw-r--. 1 sane sane 10485760 2010-03-05 02:05 full.img
drwxrwxr-x. 7 sane sane 4096 2010-03-05 01:28 .git
$ sudo mkdir /mnt/full_disk
$ sudo mount -o loop ./full.img /mnt/full_disk
mount: you must specify the filesystem type
$ sudo mount -o loop -t ext4 ./full.img /mnt/full_disk
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
$ dmesg |tail
EXT4-fs (loop0): VFS: Can't find ext4 filesystem
あれー?
ぐぐる
ふぉーまっとしてやる
$ mkfs.ext4 full.img
いけた
$ sudo mount -o loop -t ext4 ./full.img /mnt/full_disk
$ df -kP
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/mapper/vg_fri-lv_root 39720352 6291672 33025228 17% /
tmpfs 1544216 2172 1542044 1% /dev/shm
/dev/sda3 198337 55464 132633 30% /boot
/dev/loop0 9911 1116 8283 12% /mnt/full_disk
$ cd /mnt/full_disk
$ dd if=/dev/zero of=test1.img bs=1M count=1
ファイルをポコポコ作る
$ df -kP
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/mapper/vg_fri-lv_root 39720352 6291656 33025244 17% /
tmpfs 1544216 2068 1542148 1% /dev/shm
/dev/sda3 198337 55464 132633 30% /boot
/dev/loop0 9911 4189 5210 45% /mnt/full_disk
しきい値前で止める
ファイルに実行属性をつけて
$ chmod u+x disk_alert.sh
$ ln -s /home/sane/Documents/disk_alert/disk_alert.sh /etc/cron.d/disk_alert.sh
$ ./disk_alert.sh
でない よし
ファイル作る
$ ./disk_alert.sh
/dev/loop0 9911 5213 4186 56% /mnt/full_disk
でた!でも待ってもメールが飛ばない!今日は以上!
# umount /mnt/full_disk
つづき
$ df -kP
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/mapper/vg_fri-lv_root 39720352 6281172 33035728 16% /
tmpfs 1544056 1864 1542192 1% /dev/shm
/dev/sda3 198337 56135 131962 30% /boot
$ cd Documents/disk_alert/
$ ls -al
total 10260
drwxrwxr-x. 3 sane sane 4096 2010-03-05 02:51 .
drwxr-xr-x. 13 sane sane 4096 2010-03-05 01:28 ..
-rwxrw-r--. 1 sane sane 65 2010-03-05 01:57 disk_alert.sh
-rw-rw-r--. 1 sane sane 10485760 2010-03-05 02:23 full.img
drwxrwxr-x. 8 sane sane 4096 2010-03-05 02:51 .git
-rw-rw-r--. 1 sane sane 6 2010-03-05 02:51 .gitignore
$ ./disk_alert.sh
$ mount
/dev/mapper/vg_fri-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda3 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
gvfs-fuse-daemon on /home/sane/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=sane)
$ sudo mount -o loop full.img /mnt/full_disk/
$ mount
/dev/mapper/vg_fri-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda3 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
gvfs-fuse-daemon on /home/sane/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=sane)
/dev/loop0 on /mnt/full_disk type ext4 (rw)
$ df -kP
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/mapper/vg_fri-lv_root 39720352 6281188 33035712 16% /
tmpfs 1544056 2024 1542032 1% /dev/shm
/dev/sda3 198337 56135 131962 30% /boot
/dev/loop0 9911 4189 5210 45% /mnt/full_disk
$ ./disk_alert.sh
$ cd /mnt/full_disk/
$ ls -al
total 3092
drwxr-xr-x. 3 sane sane 1024 2010-03-05 02:44 .
drwxr-xr-x. 3 root root 4096 2010-03-05 02:08 ..
drwx------. 2 root root 12288 2010-03-05 02:23 lost+found
-rw-rw-r--. 1 sane sane 1048576 2010-03-05 02:30 test1.img
-rw-rw-r--. 1 sane sane 1048576 2010-03-05 02:30 test2.img
-rw-rw-r--. 1 sane sane 1048576 2010-03-05 02:30 test3.img
$ dd if=/dev/zero of=test4.img bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00647373 s, 162 MB/s
$ df -kP
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/mapper/vg_fri-lv_root 39720352 6281228 33035672 16% /
tmpfs 1544056 2024 1542032 1% /dev/shm
/dev/sda3 198337 56135 131962 30% /boot
/dev/loop0 9911 5227 4172 56% /mnt/full_disk
$ ./disk_alert.sh
/dev/loop0 9911 5227 4172 56% /mnt/full_disk
$ cd /etc/cron.d/
$ ls -al
total 24
drwxr-xr-x. 2 root root 4096 2010-03-05 02:36 .
drwxr-xr-x. 117 root root 12288 2010-03-07 16:48 ..
-rw-r--r--. 1 root root 113 2010-02-19 15:51 0hourly
lrwxrwxrwx. 1 root root 45 2010-03-05 02:36 disk_alert.sh -> /home/sane/Documents/disk_alert/disk_alert.sh
-rw-r--r--. 1 root root 269 2010-02-24 13:51 smolt
$ sudo rm disk_alert.sh
$ ls -al
total 24
drwxr-xr-x. 2 root root 4096 2010-03-07 16:51 .
drwxr-xr-x. 117 root root 12288 2010-03-07 16:48 ..
-rw-r--r--. 1 root root 113 2010-02-19 15:51 0hourly
-rw-r--r--. 1 root root 269 2010-02-24 13:51 smolt
/etc/cron.d/以下のファイルの書式はcrontabと同じ書式だそうだ ぐぐった
なので、実行形式のファイルを置いてもダメ
# tail -f /var/log/cron
Mar 7 17:05:01 localhost crond[1525]: (root) BAD FILE MODE (/etc/cron.d/cron_disk_alert)
BAD FILE MODE? しょんあ
とりあえずシンボリックリンクをやめてコピーした
$ sudo cp -i cron_disk_alert /etc/cron.d/.
Mar 7 17:10:01 localhost crond[1525]: (CRON) bad username (/etc/cron.d/cron_disk_alert)
あー実行ユーザがいるのか
書き加えて
$ sudo cp -i cron_disk_alert /etc/cron.d/.
cronのlogがぐりっと動く
Mar 7 17:14:01 localhost crond[1525]: (*system*) RELOAD (/etc/cron.d/cron_disk_alert)
Mar 7 17:14:01 localhost CROND[3053]: (sane) CMD (/bin/bash /home/sane/Documents/disk_alert/disk_alert.sh)
rootあてにメール来た!
# mail
Heirloom Mail version 12.4 7/29/08. Type ? for help.
"/var/spool/mail/root": 2 messages 2 new
>N 1 Cron Daemon Sun Mar 7 17:14 25/1100 "Cron <sane@fri> /bin/"
N 2 Cron Daemon Sun Mar 7 17:15 25/1100 "Cron <sane@fri> /bin/"
成功!
& 1
Message 1:
From root@localhost.localdomain Sun Mar 7 17:14:01 2010
Return-Path: <root@localhost.localdomain>
Date: Sun, 7 Mar 2010 17:14:01 +0900
X-Authentication-Warning: localhost.localdomain: sane set sender to root using -
f
From: root@localhost.localdomain (Cron Daemon)
To: root@localhost.localdomain
Subject: Cron <sane@fri> /bin/bash /home/sane/Documents/disk_alert/disk_alert.sh
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env: <MAILTO=root>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/sane>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=sane>
X-Cron-Env: <USER=sane>
Status: R
/dev/loop0 9911 5213 4186 56% /mnt/full_disk
当然ながら毎分くる!
ディスクを外そう
$ df -kP
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/mapper/vg_fri-lv_root 39720352 6282204 33034696 16% /
tmpfs 1544056 1988 1542068 1% /dev/shm
/dev/sda3 198337 56135 131962 30% /boot
/dev/loop0 9911 5213 4186 56% /mnt/full_disk
$ mount
/dev/mapper/vg_fri-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda3 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
gvfs-fuse-daemon on /home/sane/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=sane)
/dev/loop0 on /mnt/full_disk type ext4 (rw)
$ sudo umount /mnt/full_disk/
$ mount
/dev/mapper/vg_fri-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda3 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
gvfs-fuse-daemon on /home/sane/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=sane)
$ df -kP
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/mapper/vg_fri-lv_root 39720352 6282236 33034664 16% /
tmpfs 1544056 2024 1542032 1% /dev/shm
/dev/sda3 198337 56135 131962 30% /boot
cronは毎分動いてる メールは止まった
OK!
毎朝6時1分にしてやって完了
diff --git a/cron_disk_alert b/cron_disk_alert$
index 9686f27..cf94832 100644$
--- a/cron_disk_alert$
+++ b/cron_disk_alert$
@@ -1,2 +1,2 @@$
MAILTO=root$
-* * * * * /bin/bash /home/sane/Documents/disk_alert/disk_alert.sh$
+1 6 * * * sane /bin/bash /home/sane/Documents/disk_alert/disk_alert.sh
仕様を変更
仕様
- dfの値のなかで50%を越えているファイルシステムがいたら警告する
+ dfの値のなかで/は50越えてたらwarning, 70越えてたらcriticalを警告
+ それ以外は60越えてたらwarning, 80越えてたらcriticalを警告
+ warnはwarnに、criticalはcriticalに それぞれメールする
→kata2以降へ