#服務監控腳本 #!/bin/bash #monitor available disk space #查看內存佔用的百分比 free -m | sed -n '2p' | awk '{print "used mem is "$3"M,total mem is "$2"M,used percent is "$3/$2*100"%"}' #系統分配的區總量 mem_total=`free -m | grep Mem | awk '{print $2}'` #當前剩餘的free大小 mem_free=`free -m | grep Mem | awk '{print $4}'` #當前已使用的used大小 mem_used=`free -m | grep Mem | awk '{print $3}'` if (($mem_used != 0)); then #若是已被使用,則計算當前剩餘free所佔總量的百分比,用小數來表示,要在小數點前面補一個整數位0 mem_per=0`echo "scale=2;$mem_free/$mem_total" | bc` DATA="$(date -d "today" +"%Y-%m-%d-%H-%M") free percent is : $mem_per" #設置的告警值爲20%(即便用超過80%的時候告警)。 mem_warn=0.20 #當前剩餘百分比與告警值進行比較(當大於告警值(即剩餘20%以上)時會返回1,小於(即剩餘不足20%)時會返回0 ) mem_now=`expr $mem_per \> $mem_warn` #若是當前使用超過80%(即剩餘小於20%,上面的返回值等於0),釋放內存 if (($mem_now == 0)); then DAT="`date +%Y%m%d`" HOUR="`date +%H`" DIR="/home/weblog/host_${DAT}/${HOUR}" DELAY=60 COUNT=60 # whether the responsible directory exist if ! test -d ${DIR} then /bin/mkdir -p ${DIR} fi # general check export TERM=linux /usr/bin/top -b -d ${DELAY} -n ${COUNT} > ${DIR}/top_${DAT}.log 2>&1 & # cpu check #/usr/bin/sar -u ${DELAY} ${COUNT} > ${DIR}/cpu_${DAT}.log 2>&1 & #/usr/bin/mpstat -P 0 ${DELAY} ${COUNT} > ${DIR}/cpu_0_${DAT}.log 2>&1 & #/usr/bin/mpstat -P 1 ${DELAY} ${COUNT} > ${DIR}/cpu_1_${DAT}.log 2>&1 & # memory check /usr/bin/vmstat ${DELAY} ${COUNT} > ${DIR}/vmstat_${DAT}.log 2>&1 & # I/O check #/usr/bin/iostat ${DELAY} ${COUNT} > ${DIR}/iostat_${DAT}.log 2>&1 & # network check #/usr/bin/sar -n DEV ${DELAY} ${COUNT} > ${DIR}/net_${DAT}.log 2>&1 & #/usr/bin/sar -n EDEV ${DELAY} ${COUNT} > ${DIR}/net_edev_${DAT}.log 2>&1 & fi fi