bash脚本如何监控cup/内存/磁盘使用率

目录
  • 查看消耗内存最多的前40个进程:
  • 自动任务做一个基础资源告警脚本
  • 利用free工具监控内存利用率,超过80报警并提取出占用内存最高的前十进程。
  • 利用df命令监控磁盘利用率,超过80报警。

这篇博客中所写的,在实际工作中并没有什么卵用,工作中并不会用到这种脚本去监控。不过自己写一遍,可以让初学者对cpu、内存、磁盘等一些基础知识和基础命令更加了解。

#!/bin/bash

#获取内存情况
mem_total=`free | awk 'nr==2{print $2}'` #获取内存总大小
mem_use=`free  | awk 'nr==2{print $3}'` #获取内存使用大小

#统计内存使用率 (使用大小/总大小)
mem_use_rate=`awk 'begin{print('$mem_use'/'$mem_total')*100}'| awk '{print int($0)}'`
#echo $mem_use_rate ----------

#获取磁盘使用率
disk_use_rate_str=`df -h | grep /dev/vda1 | awk -f '[ %]+' '{print $5}'| awk '{print int($0)}'`

#获取cpu使用率
cpu_use_rate=`top -n 1 | grep cpu |awk '{print $2}'| awk '{print int($0)}'`

#报警时间
file_log=/home/error.log  #提前创建
now_time=`date '+%f %t'`

function send_mail(){

}


function check(){

        if [[ "men_use_rate" > 50 ]] || [[ "disk_use_rate" > 50 ]] || [[ "cpu_use_rate" > 50 ]];then
                echo "报警时间:"$now_time > $file_log
                echo "cpu使用率:${cpu_use_rate}% --> 磁盘使用率:${disk_use_rate}% --> 内存使用率:${men_use_rate}%"
                send_mail
        fi
}

function main(){
        check
}
main

注: awk ‘{print int($0)}’

可以将浮点数转为整数 在进行比较大小 shell 不支持浮点直接与整数进行比较
需要用的bc 的计算方式
if [[ “men_use_rate” > 50 ]] 等同于 if [ $men_use_rate > 50 ]

bc 例:

#!/bin/bash
var1=20
var2=3.14159
var3=`echo "scale=0;$var2 - $var1 " | bc`
echo $var3

var4=`echo "$var1 < $var2"|bc`
echo $var4

查看消耗内存最多的前40个进程:

ps auxw|head -1;ps auxw|sort -rn -k4|head -40

自动任务做一个基础资源告警脚本

#!/bin/bash
now=`date -u -d"+8 hour" +'%y-%m-%d %h:%m:%s'`
#cpu使用阈值
cpu_warn='85'
#mem空闲阈值
mem_warn='1000'
#disk使用阈值
disk_warn='90'

#---cpu
item_cpu () {
cpu_idle=`top -b -n 1 | grep cpu | awk '{print $8}'|cut -f 1 -d "."`
cpu_use=`expr 100 - $cpu_idle`
echo "$now 当前cpu使用率为 $cpu_use" >> /tmp/monitoring.log
if [ $cpu_use -gt $cpu_warn ]
    then
        echo "cpu warning!!!"
    else
        echo "cpu ok!!!"
fi
}
#---mem
item_mem () {
#mb为单位
mem_free=`free -m | grep "mem" | awk '{print $4+$6}'`
echo "$now 当前内存剩余空间为 ${mem_free}mb" >> /tmp/monitoring.log
if [ $mem_free -lt $mem_warn  ]
    then
        echo "mem warning!!!"
    else
        echo "mem ok!!!"
                
fi
}
#---disk
item_disk () {
disk_use=`df -p | grep /dev/vda2 | grep -v -e '(tmp|boot)' | awk '{print $5}' | cut -f 1 -d "%"`
echo "$now 当前磁盘使用率为 $disk_use" >> /tmp/monitoring.log
if [ $disk_use -gt $disk_warn ]
    then
        echo "disk warning!!!"
    else
        echo "disk ok!!!"
        
fi


}

item_cpu
item_mem
item_disk

利用free工具监控内存利用率,超过80报警并提取出占用内存最高的前十进程。

代码如下:

#!/bin/bash
#
total=$(free -m | sed -n '2p' | awk '{print $2}')
used=$(free -m | sed -n '2p' | awk '{print $3}')
free=$(free -m | sed -n '2p' | awk '{print $4}')
shared=$(free -m | sed -n '2p' | awk '{print $5}')
buff=$(free -m | sed -n '2p' | awk '{print $6}')
cached=$(free -m | sed -n '2p' | awk '{print $7}')
rate=`echo "scale=2;$used/$total" | bc | awk -f. '{print $2}'`
echo -e "total\tused\tfree\tshared\tbuffer\tavailable"
echo -e "${total}m\t${used}m\t${free}m\t${shared}m\t${buff}m\t${cached}m\nrate:${rate}%"
if    [ $rate -ge 80 ]
then    echo "memory warn"
    ps aux | grep -v user | sort -rn -k4 | head
fi

利用df命令监控磁盘利用率,超过80报警。

df :显示磁盘分区上的可使用的磁盘空间。

  -h 以更易读的方式显示;

  -p 使用posix的输出格式。

#!/bin/bash
#
dev=`df -hp | grep '^/dev/*' | cut -d' ' -f1 | sort`
for i in $dev
do dev=`df -ph | grep $i | awk '{print $1}'`
size=`df -ph | grep $i | awk '{print $2}'`
used=`df -ph | grep $i | awk '{print $3}'`
free=`df -ph | grep $i | awk '{print $4}'`
rate=`df -ph | grep $i | awk '{print $5}'`
mount=`df -ph | grep $i | awk '{print $6}'`
echo -e "$i:\tsize:$size\tused:$used\tfree:$free\trate:$rate\tmount:$mount"
f=`echo $rate | awk -f% '{print $1}'`
if [ $f -ge 80 ];then
    echo "$mount warn"
    else echo "it's ok"
fi
done

到此这篇关于bash脚本如何监控cup/内存/磁盘使用率的文章就介绍到这了,更多相关bash监控cup/内存/磁盘使用率内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

THE END
喜欢就支持一下吧
点赞10 分享