您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關shell編程實戰之如何監控磁盤分區的使用率,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
不知道大家有沒有碰到過磁盤分區寫滿,導致新數據寫入不了,造成網站出現了問題。之前自己有幾次碰到過這種情況,自己當時緊急解決辦法是:刪除網站的日志文件,刪除了MySQL的binlog日志。
當然我們是不希望發生此類問題的,如果網站總出現不穩定或打不開情況,會給用戶一種不靠譜的感覺。所以,對于磁盤分區的使用,我們需要實時監控,當超過預設值時,就發送份郵件或短信給管理員,將錯誤扼殺至搖籃里。
對于此腳本的編寫是很簡單的,主要一點就是獲取到磁盤分區的使用率。我們知道df命令可以列出各個分區的空間使用情況:
# df Filesystem 1K-blocks Used Available Use% Mounted on devtmpfs 3986648 0 3986648 0% /dev tmpfs 3999984 0 3999984 0% /dev/shm tmpfs 3999984 528 3999456 1% /run tmpfs 3999984 0 3999984 0% /sys/fs/cgroup /dev/vda1 41931756 17576208 24355548 42% / /dev/vdb1 52403200 476572 51926628 1% /data /dev/vdb2 104806400 29255772 75550628 28% /www tmpfs 799996 0 799996 0% /run/user/0 /dev/vdb3 52402180 398576 52003604 1% /mnt
我們可以看到各個分區的空間使用情況。然后接口grep命令以及awk命令,過濾掉其他信息,只留下各個分區的使用情況信息。
我們只想得到以/dev/開頭的分區信息
# df | grep ^/dev /dev/vda1 41931756 17576264 24355492 42% / /dev/vdb1 52403200 476572 51926628 1% /data /dev/vdb2 104806400 29255980 75550420 28% /www /dev/vdb3 52402180 398576 52003604 1% /mnt
然后繼續使用awk命令過濾不想要的信息
# df | grep ^/dev | awk '{print $1":"$5}' /dev/vda1:42% /dev/vdb1:1% /dev/vdb2:28% /dev/vdb3:1%
拿到各個分區的使用率后,下面就是對其進行循環遍歷,依次判斷各個分區的使用情況。
下面給出完成的代碼:
#!/bin/bash # 監控分區的空間使用情況,超過預設值告警 export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:~/bin export LANG=en # 分區空間使用率閥值 USE_LIM=70 while ((1)) do disks=$( df | grep ^/dev | awk '{print $1":"$5}') for disk in $disks do used=$(echo $disk | cut -d: -f2 | cut -d'%' -f1) if [ "$used" -ge "$USE_LIM" ];then # 調用告警腳本,這里直接用echo來替代了 echo "$(echo $disk | cut -d: -f1) is used $used%" fi done sleep 10 done
注意:一般我們服務器上用的語系都是英文的,特別是在編寫shell腳本的時候,建議加上這樣一行
export LANG=en
因為我們是要做實時的監控,所以腳本里使用了死循環,表示此腳本不會停會一直循環執行。當然,執行速度也是要做限制的,不然占用太多服務器資源就不太好了。所以這里使用了sleep 10,表示10秒監控一次。
另外這里還要一點需要注意,就是過濾掉百分號%。這里我們使用了cut命令來過濾掉%,然后拿到純數字型的分區使用率和預設值做比較。
關于shell編程實戰之如何監控磁盤分區的使用率就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。