监控CPU利用率

关键词:sed、AWK、vmstat

1.1. CPU监控脚本(优化前):

#!/bin/bash
IP=$( ifconfig ens32|sed -n '2p'|awk '{print $2}'|xargs ) 
DATE=$(date +"%F %H:%M:%S")
US=$(vmstat | awk NR==3'{print $13}')   #仍然需要改进,详见文档下方
SY=$(vmstat | awk NR==3'{print $14}')   #仍然需要改进,详见文档下方
USE=$[ $US + $SY ]

function cpu_monitor(){
if [ $USE -ge 0 ]; then
echo "
        Date: $DATE
        Host: $IP
        Problem: CPU utilization ${USE}%
"
fi
}

cpu_monitor

实现效果:

监控CPU利用率

但是注意:如果截取的是第三行的数据,有可能和下面的图片情况一样,不准确,所以,这样做还是有不合适的地方。

监控CPU利用率

脚本改进:

模拟CPU高负载:

方法一:

[root@test tansk]# sha1sum /dev/zero &
[1] 75306
[root@test tansk]# sha1sum /dev/zero &
[2] 75307
[root@test tansk]# 

方法二:

[root@test tansk]# cat /dev/urandom | gzip -9 > /dev/null

top检查虚拟机状态:

监控CPU利用率

vmstat检查虚拟机状态

监控CPU利用率

dstat检查虚拟机状态:

监控CPU利用率

1.1. CPU监控脚本(优化后):

现在已经实现了CPU高负载,查看优化后的巡检脚本:

#!/bin/bash
IP=$( ifconfig ens32|sed -n '2p'|awk '{print $2}'|xargs ) 
DATE=$(date +"%F %H:%M:%S")
LOGFILE=/root/tansk/cpu.log

vmstat 1 5| awk NR==7>$LOGFILE
或是:dstat -c|awk NR==5 --后面截取数据的时候也需要修改为$1和$2
US=$(cat $LOGFILE| awk '{print $13}')
SY=$(cat $LOGFILE| awk '{print $14}')
echo "*********"
echo $US $SY
USE=$[ $US + $SY ]
function cpu_monitor(){
if [ $USE -ge 80 ]; then
echo "
        Date: $DATE
        Host: $IP
        Problem: CPU utilization ${USE}%
"
fi
}
cpu_monitor

实现效果:

监控CPU利用率

 

上一篇:一花一世界,一码一人生(程序猿的困惑)


下一篇:Linux:字符编码优化(LANG)