サーバーのトラブルで、HDDをの使用領域が100%になってしまい、データが保存できなくなったり、正常な動作をしなくなったりする事は比較的よくあります。
HDDの使用領域の監視は、とても重要で、毎日どのくらいのデータを取得してどの位の頻度でデータバックアップしたり、データの保持期間などの値を決める重要なデータになります。
やりたい事
dfコマンドから、全てのディスクの使用割合を取得。主要ディスク1つのみという仕様でもいいのですが、汎用性やパーティションを切ることを考えると、全てのデータを取得する方が望ましいです。
おそらく、apacheサーバーとSQLサーバーとストレージサーバーでは、パーティション構造は違ってくる事が想像できます。
ソースコード
health-hdd.sh
#!/bin/bash
DIR=`dirname $0`
dataFile=$DIR"/servers.list"
while read line
do
if [ -n "${line}" ]
then
echo ${line}"\t: `ssh -no 'ConnectTimeout 3' ${line} df|awk 'FNR==1{for(i=1;i<nf ;i++){if($i~/\%/){key=i;break}}}FNR>1{sub(\"%\",\"\",$key);if(FNR>2){val=val\",\"}val=val\"\\\"\"$1\"\\\":\"$key;}END{print val}'`"
fi
done< $dataFile
解説
1,dfコマンドで情報を取得
2、awkで各行の値を取得する。
3、1行目はメニュー部分なので割合の記述されている"%"の位置を取得
4、2行目移行はデータ部ですが、1カラム目をディスク名として取得
5、同じく2行目移行のメニューで取得した%位置と同じ場所にあるデータを値として取得
6、2つのデータをkey=valueとして、jsonデータで出力
使い方
1、「servers.list」ファイルに対象サーバーを改行区切りでいくつでも保存する。
2、以下のコマンドを叩くだけ(任意位置から叩いてもOK)
$ sh health-hdd.sh
192.168.33.1 : "/dev/md0":23,"tmpfs":0,"udev":1,"tmpfs":0,"/dev/md2":86
192.168.33.2 : "/dev/md0":10,"tmpfs":0,"udev":1,"tmpfs":0,"/dev/md2":89
192.168.33.3 : "/dev/md0":14,"tmpfs":0,"udev":1,"tmpfs":0,"/dev/md2":60
192.168.33.4 : "rootfs":10,"udev":0,"tmpfs":1,"/dev/disk/by-uuid/941aeab354ec":10,"tmpfs":0,"tmpfs":0,"/dev/md2":79
192.168.33.5 : "/dev/md0":10,"tmpfs":0,"udev":1,"tmpfs":0,"/dev/md2":81
192.168.33.6 : "/dev/md3":5,"tmpfs":0,"udev":1,"tmpfs":0,"/dev/md2":16
※上記の値は全て「%」です。
全てのパーティションの値をとっているのでswapなどで100%になっているものもある場合もありますので、そういったパーティションを除外する仕組みをつくらないといけませんね。
0 件のコメント:
コメントを投稿