※この記事を見ればRAIDの監視ができるわけではないです
mdadmで簡単にRAID構築できてこれでいいんだろうかーと思いながら適当に運用してきたけども、監視を全くやってなかった。それ運用っていわねえから!!
というわけで、どんなやり方があるか調べたけども、これをやっておけばOKというのは意外と見つからなかった。みんな祈ってるのかな。
なので、help見たりして調べた古いやり方かもしれないけども、とりあえず監視ができそうなので、メモしておく。
本当は故障をエミュレートして試したりしたほうがよいのだけど、後でやると思います(やらないフラグ)
mdadm --monitor
これがベースになる模様。これに色んなオプションを付けて色々できるらしい。
--test
実行時にテストメッセージを出力してくれる。これで簡単に機能するか確認することができる。
--delay
チェック間隔を決定できる。--helpをみたところデフォルトで60秒だった。1秒とかにすると負荷上がりそうだし。
--daemonise
デーモンとして動いてくれる。サービス化するときはこれで良さそう。
出力方式
--syslog
syslog出力してくれる。こんな感じで。
# 1秒後にmdadmにSIGINT(Ctrl+C)を送るようにして実行 timeout -s INT 1 mdadm --monitor --syslog --test --scan
Sep 24 00:34:15 localhost mdadm[6849]: TestMessage event detected on md device /dev/md/localhost.localdomain:0
Sep 24 00:34:15 localhost mdadm[6849]: TestMessage event detected on md device /dev/md/localhost.localdomain:1
--mail=mailto@yourdomain.tld
メールで送る、らしい。メールサーバがないので試してない。
mdadm.confでMAILADDRを指定しても同じ?
--program=/path/to/notifer.sh
通知プログラムを起動する。プログラムに引数でメッセージを渡す。
mdadm.confでPROGRAMを指定しても同じ効果が得られる?
サンプルプログラムを作ってmdadm --monitorで発生したメッセージをプログラムに渡して実行する様子を観察した。
cat << __EOF__ > /tmp/example.sh #!/bin/bash echo "---------" echo "\$1 => $1" echo "\$2 => $2" echo "\$* => $*" __EOF__ chmod 0700 /tmp/example.sh # 1秒後にmdadmにSIGINT(Ctrl+C)を送るようにして実行 timeout -s INT 1 mdadm --monitor --program=/tmp/example.sh --test --scan
- -
$1 => TestMessage
$2 => /dev/md/localhost.localdomain:0
$* => TestMessage /dev/md/localhost.localdomain:0
- -
$1 => TestMessage
$2 => /dev/md/localhost.localdomain:1
$* => TestMessage /dev/md/localhost.localdomain:1
所感
自分の環境はSyslogサーバがあるので--syslogを付けて裏で走らせておけば良い感じはした。
ログをどっかに集約したいなら、送りつける簡単なスクリプトを書いて、--programに与えれば良さそう。
メールは・・・今時流行らない気もする。
おわり
本当にこれだけで足りるんだろうか疑問。というのも、不良セクタとか色々物理的なトラブルなどで、ファイルアクセス時に初めて気づくものもあるだろうし。
RAID1なら両方にあるから片方がおかしいと気づくのかな?その辺りってどうなんだろう。
本当にアクセスできなくなるまでダンマリで、実際に影響が出た後に監視で上がるとあんまり意味ないし・・・