监控内存、cpu、硬盘,cpu是检查5秒内的使用率
monitor_system.sh
#!/bin/bash
arr=()
disks="/dev/sda2 /dev/sdb1"
time=$(date "+%Y-%m-%d %H:%M:%S")
echo $time
MEM_USAGE=`free|grep Mem|awk '{print ($2-$7)/$2}'`
arr[${#arr[*]}]=${MEM_USAGE}
echo "MEM Usage:"`echo ${MEM_USAGE}|awk '{printf "%.2f", $1*100}'`"%"
TIME_INTERVAL=5
LAST_CPU_INFO=$(cat /proc/stat | grep -w cpu | awk '{print $2,$3,$4,$5,$6,$7,$8}')
LAST_SYS_IDLE=`echo $LAST_CPU_INFO | awk '{print $4}'`
LAST_TOTAL_CPU_T=`echo $LAST_CPU_INFO | awk '{print $1+$2+$3+$4+$5+$6+$7}'`
sleep ${TIME_INTERVAL}
NEXT_CPU_INFO=$(cat /proc/stat | grep -w cpu | awk '{print $2,$3,$4,$5,$6,$7,$8}')
NEXT_SYS_IDLE=`echo $NEXT_CPU_INFO | awk '{print $4}'`
NEXT_TOTAL_CPU_T=`echo $NEXT_CPU_INFO | awk '{print $1+$2+$3+$4+$5+$6+$7}'`
SYSTEM_IDLE=$((${NEXT_SYS_IDLE}-${LAST_SYS_IDLE}))
TOTAL_TIME=$((${NEXT_TOTAL_CPU_T}-${LAST_TOTAL_CPU_T}))
CPU_USAGE=`echo ${SYSTEM_IDLE} ${TOTAL_TIME}|awk '{print 1-$1/$2}'`
arr[${#arr[*]}]=${CPU_USAGE}
echo "CPU Usage:"`echo ${CPU_USAGE}|awk '{printf "%.2f", $1*100}'`"%"
for disk in ${disks};
do
c=`df -l | grep ${disk} | awk '{print $3/$2}'`
arr[${#arr[*]}]=${c}
echo "DISK ${disk} Usage:"`echo ${c}|awk '{printf "%.2f", $1*100}'`"%"
done
echo ${arr[@]} >> $1
exit 0
每分钟统计一下,看哪些指标超过限定值
loop_monitor_system.sh
#!/bin/bash
DISK_LEVEL=0.7 # 70%
CPU_LEVEL=0.7 # 70%
MEM_LEVEL=0.7 # 70%
logname="/tmp/monitor_system.log"
>${logname}
end_t=`date -d "55sec" +%s`
while [ $(date +%s) -le ${end_t} ];
do
./monitor_system.sh $logname
done
disk_num=`cat ${logname}|head -1|awk '{print NF-2}'`
avg_mem=`cat ${logname}|awk '{sum+=$1}END{print sum/NR}'`
avg_cpu=`cat ${logname}|awk '{sum+=$2}END{print sum/NR}'`
#echo ${avg_mem} ${avg_cpu}
if [ $(echo "${avg_mem}>${MEM_LEVEL}" | bc) = 1 ];then
echo 'mem to high:'`echo ${avg_mem}|awk '{print $1*100}'`
fi
if [ $(echo "${avg_cpu}>${CPU_LEVEL}" | bc) = 1 ];then
echo 'cpu to high:'`echo ${avg_cpu}|awk '{print $1*100}'`
fi
for((i=1;i<=${disk_num};i++));
do
j=$((${i}+2))
avg_disk=`cat ${logname}|awk '{sum+=$'${j}'}END{print sum/NR}'`
if [ $(echo "${avg_disk}>${DISK_LEVEL}" | bc) = 1 ];then
echo 'disk to high:'`echo ${avg_disk}|awk '{print $1*100}'`
fi
#echo ${avg_disk}
done
exit 0