Linux磁盤空間監控告警


Linux系統中需要監控磁盤各分區的使用情況,避免由於各種突發情況,造成磁盤空間被消耗殆盡的情況,例如某個分區被Oracle的歸檔日志耗盡,導致后續的日志文件無法歸檔,這時ORACLE數據庫就會出現錯誤。監控磁盤空間的使用情況,其實有許多工具,例如Nagios等,其實最簡單的還是使用Shell腳本。下面就介紹一下如何通過Shell腳本和Crontab作業結合來實現對磁盤空間的監控、告警。

一般查看磁盤各分區的使用情況可以通過df命令來查看,網上有兩種獲取磁盤使用百分比的Shell腳本。

1:df -h | grep /dev | awk '{print $5}' | cut -f 1 -d "%"

2:df -h | grep /dev | awk '{print $5}' | sed 's/%//g'

但是這兩個命令還是有些bug,例如如下截圖所示:當顯示內容過長,導致換行時。此時上面的Shell腳本就無法獲取其值。

clip_image001

clip_image002

尤其是某些特殊情況下,完全無法准確獲取相應數據

clip_image003

此時只需在參數上稍微做一下調整即可

1:df -P | grep /dev | awk '{print $5}' | cut -f 1 -d "%"

2:df -P | grep /dev | awk '{print $5}' | sed 's/%//g'

clip_image004

下面腳本是用來監控各分區使用情況,當超過閥值(默認為90%)時,發出告警郵件,通知管理員及時處理。

#*************************************************************************
#  FileName     :               disk_capatiy_alarm.sh 
#*************************************************************************
#  Author       :               Kerry
#  CreateDate   :               2013-11-07
#  Description  :               this script is mointoring the linux disk
#                               capacity, if disk used more than 90%,
#                               then it will send a alarm email
#*************************************************************************

#! /bin/bash


email_content="/home/oracle/scripts/output/disk_sendmail.pl"
email_logfile="/home/oracle/scripts/output/diskdetail.txt";

cat /dev/null > ${email_content};
cat /dev/null > ${email_logfile};

SendMail()
{

date_today=`date +%Y_%m_%d`
subject="The server xxxxxx\'s Disk Capacity Alarm"
content="Dear All,

   The server xxxx(xxx.xxx.xxx.xxx) disk capacity alarm ,please  take action for it. many thanks!

"

echo "#!/usr/bin/perl" >> ${email_content}
echo "use Mail::Sender;" >> ${email_content}
echo "\$sender = new Mail::Sender {smtp => 'xxx.xxx.xxx.xxx', from => 'xxx@xxx.com'}; ">> ${email_content}
echo "\$sender->MailFile({to => 'kerry@xxx.com',">> ${email_content}
echo "cc=>'xxxx@xxxx.com'," >> ${email_content}
echo "subject => '$subject',">> ${email_content}
echo "msg => '$content',">> ${email_content}
echo "file => '${email_logfile}'});">> ${email_content}

perl ${email_content}

}


for d in `df -P | grep /dev | awk '{print $5}' | sed 's/%//g'` 

 do

    if [ $d -gt 90 ]; then

           df -h >>$email_logfile;

           SendMail;

             exit 0;

    fi

done

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM