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

 更新时间:2021年10月21日 09:50:43   作者:weixin_42849517  
本文主要介绍了bash脚本如何监控cup/内存/磁盘使用率,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

这篇博客中所写的,在实际工作中并没有什么卵用,工作中并不会用到这种脚本去监控。不过自己写一遍,可以让初学者对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/内存/磁盘使用率内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux中文件权限目录权限的意义及权限对文件目录的意义

    Linux中文件权限目录权限的意义及权限对文件目录的意义

    本文给大家介绍Linux中文件目录权限的意义及Linux的权限对于文件与目录的意义,涉及到linux 文件、目录、权限相关知识,对本文感兴趣的朋友一起学习吧
    2016-01-01
  • 详解Shell if else语句的具体使用方法

    详解Shell if else语句的具体使用方法

    这篇文章主要介绍了详解Shell if else语句的具体使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • shell中set设置-e和 -x的用法

    shell中set设置-e和 -x的用法

    本文主要介绍了shell中set设置-e和 -x的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • shell一键部署Zabbix的实现步骤

    shell一键部署Zabbix的实现步骤

    本文主要介绍了shell一键部署Zabbix的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • shell脚本批量创建用户的方法小结

    shell脚本批量创建用户的方法小结

    有些面试题中会问到批量创建用户的题目,大体是用循环去进行创建,但有时也会有一些额外的附加条件,下面这篇文章主要给大家介绍了关于shell脚本批量创建用户的相关资料,需要的朋友可以参考下
    2022-03-03
  • Shell中统计字符串中单词的个数的几种方法

    Shell中统计字符串中单词的个数的几种方法

    今天小编就为大家分享一篇关于Shell中统计字符串中单词的个数的几种方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 在shell脚本中获取上个月最后一天的日期方法

    在shell脚本中获取上个月最后一天的日期方法

    今天小编就为大家分享一篇在shell脚本中获取上个月最后一天的日期方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Shell中使用exec命令的方法和用途

    Shell中使用exec命令的方法和用途

    本文主要介绍了Shell中使用exec命令的方法和用途,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • expect中为send语句上加变量的代码

    expect中为send语句上加变量的代码

    expect中为send语句上加变量,感兴趣的朋友可以看看
    2013-02-02
  • 分享20个Unix/Linux 命令技巧

    分享20个Unix/Linux 命令技巧

    这篇文章主要介绍了分享20个Unix/Linux 命令技巧,需要的朋友可以参考下
    2015-04-04

最新评论