千家信息网

bash脚本怎么监控cup/内存/磁盘使用率

发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,本篇内容主要讲解"bash脚本怎么监控cup/内存/磁盘使用率",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"bash脚本怎么监控cup/内存/磁盘使用率"
千家信息网最后更新 2024年12月13日bash脚本怎么监控cup/内存/磁盘使用率

本篇内容主要讲解"bash脚本怎么监控cup/内存/磁盘使用率",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"bash脚本怎么监控cup/内存/磁盘使用率"吧!

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

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

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

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

#!/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/bashvar1=20var2=3.14159var3=`echo "scale=0;$var2 - $var1 " | bc`echo $var3var4=`echo "$var1 < $var2"|bc`echo $var4

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

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

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

#!/bin/bashnow=`date -u -d"+8 hour" +'%Y-%m-%d %H:%M:%S'`#cpu使用阈值cpu_warn='85'#mem空闲阈值mem_warn='1000'#disk使用阈值disk_warn='90'#---cpuitem_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.logif [ $cpu_use -gt $cpu_warn ]    then        echo "cpu warning!!!"    else        echo "cpu ok!!!"fi}#---memitem_mem () {#MB为单位mem_free=`free -m | grep "Mem" | awk '{print $4+$6}'`echo "$now 当前内存剩余空间为 ${mem_free}MB" >> /tmp/monitoring.logif [ $mem_free -lt $mem_warn  ]    then        echo "mem warning!!!"    else        echo "mem ok!!!"                fi}#---diskitem_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.logif [ $disk_use -gt $disk_warn ]    then        echo "disk warning!!!"    else        echo "disk ok!!!"        fi}item_cpuitem_memitem_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 | headfi

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

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

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

  -P 使用POSIX的输出格式。

#!/bin/bash#DEV=`df -hP | grep '^/dev/*' | cut -d' ' -f1 | sort`for I in $DEVdo 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"fidone

到此,相信大家对"bash脚本怎么监控cup/内存/磁盘使用率"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0