关键词: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高负载:
方法一:
[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检查虚拟机状态:
vmstat检查虚拟机状态
dstat检查虚拟机状态:
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
实现效果: