0

サーバーのディスク IO を監視し、別のしきい値を設定したい

  • 警告if %busy above 60%
  • エラーif %busy above 80%

sar の出力から、80% を超えるビジー状態のエラー ディスクを見つける必要があり、2 行目で 60 を超えるが 80% 未満のビジー状態のディスクが必要です。

これを行うスクリプトを作成しましたが、sar一度だけ実行してエラーと警告のしきい値に同じ出力を使用するより良い方法はありますか? 私のシステムは AIX 6.1 です。

sar -d 2 2 |sed -n '/Average/,$p'|
     sed -e 's/Average//g'|
     awk 'NR> 1 {
         if ($2 >80) {
             print $1, $2; f=1
         }  
     }
     END { if (!f) print "ok" }'

sar -d 2 2 |
    sed -n '/Average/,$p'|
    sed -e 's/Average//g'|
    awk 'NR> 1{ if ($2 >60 && $2 <81)  { print $1, $2; f=1; }  }
    END { if (!f) print "ok" }'

Plsは以下の私の更新されたスクリプトを見つけます

bash-3.00$ cat diskio.sh
#!/bin/bash
a=`sar -d 2 2 |sed -n '/Average/,$ {s/Average//g;p;}'`
e=`$a|awk 'NR> 1{ if ($2 >40)  { print $1, $2; f=1; }  }
    END { if (!f) print "ok" }'`
w=`$a|awk 'NR> 1{ if ($2 <40 && $2 >20)  { print $1, $2; f=1; }  }
    END { if (!f) print "ok" }'`
echo $e
echo $w

bash-3.00$ sh -v diskio.sh
#!/bin/bash
a=`sar -d 2 2 |sed -n '/Average/,$ {s/Average//g;p;}'`
e=`$a|awk 'NR> 1{ if ($2 >40)  { print $1, $2; f=1; }  }
    END { if (!f) print "ok" }'`
diskio.sh[3]: hdisk18:  not found.
w=`$a|awk 'NR> 1{ if ($2 <40 && $2 >20)  { print $1, $2; f=1; }  }
    END { if (!f) print "ok" }'`

diskio.sh[4]: hdisk18:  not found.
echo $e
ok
echo $w
ok
bash-3.00$ sar -d 2 2 |
    sed -n '/Average/,$ {s/Average//g;p;}'|
        awk 'NR> 1{ if ($2 >40)  { print $1, $2; f=1; }  }
        END { if (!f) print "ok" }'

hdisk79 135
hdisk101 85
bash-3.00$
4

2 に答える 2

2

これで一部短縮できます。

sar -d 2 2 | awk '/Average/ {t=1;next} t && NR>1 && $2>80 {print $1,$2;f=1} END { if (!f) print "ok" }'

これはあなたが望むことをするはずです

sar -d 2 2 | awk '/Average/ {t=1;next} t && NR>1 {if ($2>80) h=1;if ($2>60) l=1} END {if (h) {print "80+";exit};if (l) print "60+"}'

60+その上6080+上にある場合は印刷されます80


または、変数に格納します

status=$(sar -d 2 2 | awk '/Average/ {t=1;next} t && NR>1 {if ($2>80) h=1;if ($2>60) l=1} END {if (h) {print "H";exit};if (l) print "L"}')

ここではforとforに設定statusしますL60+H80+


これにより、ステータスも出力されます。

sar -d 2 2 | awk '/Average/ {t=1;next} t && NR>1 {if ($2>80) h=1;if ($2>60) {print $1,$2;l=1}} END {if (!l) print "ok"}'
于 2013-11-12T06:42:02.863 に答える