はじめに
監視といったら、OSSの監視ソフトをサーバーにインストールして行うことが最近は多いと思います。
しかしオンプレ環境では環境を重くしたくないなどの理由から監視ツールを入れるのが億劫なことも多々あるんじゃないでしょうか?
その際、スクリプトを使って簡易的な監視をしたいなんてことも出てくるかもしれません。
今回は、試し書きした物(未完成品)の備忘録です。
※監視といっても、閾値を超えたら「標準出力」「ログファイル出力」をするだけで、どこかに通知するものではないです。
※シェルスクリプト初めて書いてみたので、間違っている部分、イケてない部分あると思います。
※監視初心者です。
メモリ使用率の監視
#!/bin/bash
#日付取得用
YMD=`date +"%Y/%m/%d %p %I:%M:%S"`
#標準出力の出力先ログファイル
MEM_LOG="/home/memory_limit.log"
#メモリ閾値 100%=100で記載
MEM_LIMIT=90
SWAP_LIMIT=10
#メモリ使用率取得
MEM_USED=`free | grep Mem | awk '{ print ($2-$3)/$2*100 }'`
SWAP_USED=`free | grep Swap | awk '{ print $3/$2*100 }'`
#メモリ使用量の閾値チェック
if [ $MEM_USED > $MEM_LIMIT ]; then
echo "$HOSTNAME memory over $MEM_USED %"
echo "$HOSTNAME memory over $MEM_USED %, date is $YMD" >> $MEM_LOG
fi
#メモリ使用量の閾値チェック
if [ $SWAP_USED > $SWAP_LIMIT ]; then
echo "$HOSTNAME swap over $SWAP_USED %"
echo "$HOSTNAME swap over $SWAP_USED %, date is $YMD" >> $MEM_LOG
fi
使い方
sh スクリプト名
瞬間的にメモリ使用率が閾値を超えているかどうかチェックするスクリプト。
なので一定期間中調査したい場合などは、実行側(例えばcron、ossであればfluentdなど)から、実行時間・実行間隔・終了時間を指定してあげる必要がある。
CPU使用率の監視
#!/bin/bash
#日付取得用
YMD=`date +"%Y/%m/%d %p %I:%M:%S"`
#標準出力の出力先ログファイル
CPU_LOG="/home/cpu_limit.log"
#CPU使用率閾値 100%=100で記載
CPU_LIMIT=90
#cpuの調査間隔
CPU_RESEARCH_INTERVAL=10
function aggregate_over_count() {
if [ $over_count == $research_count ];then
# CPU調査の度、毎度閾値を超えていた場合。
echo "$HOSTNAME cpu is over $CPU_LIMIT %"
echo "$HOSTNAME cpu is over $CPU_LIMIT %, date is $YMD" >> $CPU_LOG
fi
}
research_count=0
over_count=0
trap aggregate_over_count EXIT # 正常終了したときに後処理を実行
while :; do
research_count=$(( research_count += 1))
if [ `vmstat | sed '1, 2d' | awk '{print $13 + $14}'` -gt $CPU_LIMIT ];then
over_count=$(( over_count += 1 ))
fi
sleep $CPU_RESEARCH_INTERVAL
done
使い方
「timeout 時間 sh スクリプト名」として実行する。
上記のコマンドで与えた時間中、CPU_RESEARCH_INTERVALの間隔でCPU使用率の値を調査し、その値が常時90%以上だった場合、閾値超えとしてなんらかのアクションを取るようなロジックにしている。つもり。
おしまい。