[Server] サーバー管理ツールを作る #4「HDD使用値の取得」

2015年5月13日

サーバー プログラミング 特集

サーバーのトラブルで、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%になっているものもある場合もありますので、そういったパーティションを除外する仕組みをつくらないといけませんね。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。