bash腳本如何監(jiān)控cup/內(nèi)存/磁盤使用率
這篇博客中所寫的,在實際工作中并沒有什么卵用,工作中并不會用到這種腳本去監(jiān)控。不過自己寫一遍,可以讓初學(xué)者對CPU、內(nèi)存、磁盤等一些基礎(chǔ)知識和基礎(chǔ)命令更加了解。
#!/bin/bash #獲取內(nèi)存情況 mem_total=`free | awk 'NR==2{print $2}'` #獲取內(nèi)存總大小 mem_use=`free | awk 'NR==2{print $3}'` #獲取內(nèi)存使用大小 #統(tǒng)計內(nèi)存使用率 (使用大小/總大小) 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 #提前創(chuàng)建 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}% --> 內(nèi)存使用率:${men_use_rate}%" send_mail fi } function main(){ check } main
注: awk '{print int($0)}'
可以將浮點數(shù)轉(zhuǎn)為整數(shù) 在進(jìn)行比較大小 shell 不支持浮點直接與整數(shù)進(jìn)行比較
需要用的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
查看消耗內(nèi)存最多的前40個進(jìn)程:
ps auxw|head -1;ps auxw|sort -rn -k4|head -40
自動任務(wù)做一個基礎(chǔ)資源告警腳本
#!/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 當(dāng)前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 當(dāng)前內(nèi)存剩余空間為 ${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 當(dāng)前磁盤使用率為 $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工具監(jiān)控內(nèi)存利用率,超過80報警并提取出占用內(nèi)存最高的前十進(jìn)程。
代碼如下:
#!/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命令監(jiān)控磁盤利用率,超過80報警。
df :顯示磁盤分區(qū)上的可使用的磁盤空間。
-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
到此這篇關(guān)于bash腳本如何監(jiān)控cup/內(nèi)存/磁盤使用率的文章就介紹到這了,更多相關(guān)bash監(jiān)控cup/內(nèi)存/磁盤使用率內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux下實現(xiàn)SSH免密碼登錄和實現(xiàn)秘鑰的管理、分發(fā)、部署SHELL腳本分享
這篇文章主要介紹了Linux下實現(xiàn)SSH免密碼登錄和實現(xiàn)秘鑰的管理、分發(fā)、部署SHELL腳本分享,本文先是講解了SSH免密碼登錄的創(chuàng)建過程,然后給出了可以分發(fā)、部署密鑰的Shell腳本,需要的朋友可以參考下2014-09-09Shell循環(huán)語句的使用(for循環(huán)、while循環(huán)、until循環(huán))
本文主要介紹了Shell循環(huán)語句的使用(for循環(huán)、while循環(huán)、until循環(huán)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06shell中使用expect命令進(jìn)行遠(yuǎn)程執(zhí)行命令腳本
今天小編就為大家分享一篇關(guān)于shell中使用expect命令進(jìn)行遠(yuǎn)程執(zhí)行命令腳本,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03shell腳本編寫ping包及arp的監(jiān)控并發(fā)送短信功能
這篇文章主要介紹了shell腳本編寫ping包及arp的監(jiān)控并發(fā)送短信功能,需要的朋友可以參考下2017-03-03Linux命令之網(wǎng)絡(luò)命令route詳解
route命令是Linux系統(tǒng)中的一個網(wǎng)絡(luò)管理工具,用于顯示和操作IP路由表,它可以用來查看當(dāng)前系統(tǒng)的路由表信息,添加、刪除或修改路由表項,以及顯示路由表中的詳細(xì)信息,本文給大家介紹Linux命令之網(wǎng)絡(luò)命令route詳解,感興趣的朋友一起看看吧2023-10-10