ファイルシステム使用率の監視シェルスクリプトです。
大まかに以下のような仕様になっています。
- リストファイルに監視対象のマウントポイントを記載しておく
- 監視インターバルは秒数で指定可
- 閾値は警告とエラーの2段階で設定
監視の仕組みとしては、こちらのファイルシステム使用率の監視スクリプトを常に実行状態としておき、閾値を超えたらログに出力させ、JP1などのログ監視の機能を用いてログにエラーが出力されたことを検知するいう運用を想定したものです。
ファイルシステム使用率監視のシェルスクリプト
サンプルコード(filesystem_mon.sh)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#!/bin/sh ############################################################# # シェル名 : filesystem_mon.sh # 機能 : ファイルシステム使用率監視 # 引数 : なし # リストファイル: filesystem_mon.lst ############################################################# ### 変数定義 ########################### LIMIT_WARN=80 #警告閾値(%) LIMIT_ERROR=90 #エラー閾値(%) INTERVAL=900 #監視インターバル(秒) LOG_FILE=/usr/shell/log/$0.log #ログファイル LIST_FILE=/usr/shell/etc/filesystem_mon.lst #リストファイル ### メイン処理 ######################### # 実行ユーザ確認 if [ ! `whoami` = "root" ]; then echo "`date '+%Y/%m/%d %H:%M:%S'` ERROR: rootユーザで実行してください" >> ${LOG_FILE} exit 1 fi # リストファイル存在確認 if [ ! -f ${LIST_FILE} ]; then echo "`date '+%Y/%m/%d %H:%M:%S'` ERROR: リストファイルが存在しません" >> ${LOG_FILE} exit 2 fi # ファイルシステム使用率確認 while true do while read FS do FS_USED=`df -P ${FS} | tail -1 | awk '{print $5}' | sed 's/%//'` if [ ${FS_USED} -ge ${LIMIT_ERROR} ]; then echo "`date '+%Y/%m/%d %H:%M:%S'` ERROR: filesystem 90% over ${FS}=${FS_USED}%" >> ${LOG_FILE} elif [ ${FS_USED} -ge ${LIMIT_WARN} ]; then echo "`date '+%Y/%m/%d %H:%M:%S'` WARNING: filesystem 80% over ${FS}=${FS_USED}%" >> ${LOG_FILE} fi done < ${LIST_FILE} sleep ${INTERVAL} done |
リストファイル(filesystem_mon.lst)
以下のように監視対象のファイルシステムのマウントポイントを、1行1データで記述しておきます。
1 2 3 4 |
/ /var /home /etc |
解説
実行ユーザ確認と、リストファイル存在確認は念のため入れてます。
ファイルシステム使用率の確認処理は、以下の通り無限ループの処理です。
sleepコマンドを使うことで、指定した秒数だけ処理を止めることができます。
1 2 3 4 5 6 |
While true do ・ ・ sleep ${INTERVAL} done |
リストファイルの内容を1行ずつ読み込んでループ処理をさせる場合は、以下のようにWhile文とreadコマンドを組み合わせる方法でできます。
FSの部分は任意の変数名を指定する箇所です。他の名前でもかまいません。
1 2 3 4 5 |
while read FS do ・ ・ done < ${LIST_FILE} |
各ファイルシステム使用率は、dfコマンドの結果からパーセントの数字部分のみを切り出して判定します。
dfコマンドの実行結果のサンプルは以下の通りです。dfコマンドにオプションで-Pをつけているのは、1ファイルシステムのデータが2行で出力されることを防ぐためです。ファイルシステム名が長い時に2行で出力される場合があります。
1 2 3 |
[user@localhost]$ df -P / Filesystem 1024-blocks Used Available Use% Mounted On /dev/mapper/cl-root 9316352 1472176 7844176 16% / |
以下のコマンドラインの部分で、ファイルシステム使用率を抜き出しています。
1 |
df -P ${FS} | tail -1 | awk '{print $5}' | sed 's/%//' |
df -P ${FS} | tail -1 → dfコマンドの結果のうち最終行のみを抜き出す
awk ‘{print $5}’ → 左から5番目のカラムの値(Use%の値)を抽出する
sed ‘s/%//’ → %の記号を除外して数字部分のみにする。
あとはIF文の部分で、閾値を超えているかを判定して、エラーメッセージをログに出力させています。
1 2 3 4 5 |
if [ ${FS_USED} -ge ${LIMIT_ERROR} ]; then echo "`date '+%Y/%m/%d %H:%M:%S'` ERROR: filesystem 90% over: ${FS}=${FS_USED}%" >> ${LOG_FILE} elif [ ${FS_USED} -ge ${LIMIT_WARN} ]; then echo "`date '+%Y/%m/%d %H:%M:%S'` WARNING: filesystem 80% over: ${FS}=${FS_USED}%" >> ${LOG_FILE} fi |
コメント