溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

shell編程實戰(zhàn)之如何監(jiān)控磁盤分區(qū)的使用率

發(fā)布時間:2020-09-22 09:18:22 來源:億速云 閱讀:201 作者:小新 欄目:建站服務器

這篇文章將為大家詳細講解有關shell編程實戰(zhàn)之如何監(jiān)控磁盤分區(qū)的使用率,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

不知道大家有沒有碰到過磁盤分區(qū)寫滿,導致新數據寫入不了,造成網站出現了問題。之前自己有幾次碰到過這種情況,自己當時緊急解決辦法是:刪除網站的日志文件,刪除了MySQL的binlog日志。

當然我們是不希望發(fā)生此類問題的,如果網站總出現不穩(wěn)定或打不開情況,會給用戶一種不靠譜的感覺。所以,對于磁盤分區(qū)的使用,我們需要實時監(jiān)控,當超過預設值時,就發(fā)送份郵件或短信給管理員,將錯誤扼殺至搖籃里。

對于此腳本的編寫是很簡單的,主要一點就是獲取到磁盤分區(qū)的使用率。我們知道df命令可以列出各個分區(qū)的空間使用情況:

# 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

我們可以看到各個分區(qū)的空間使用情況。然后接口grep命令以及awk命令,過濾掉其他信息,只留下各個分區(qū)的使用情況信息。

我們只想得到以/dev/開頭的分區(qū)信息

# 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

然后繼續(xù)使用awk命令過濾不想要的信息

# df | grep ^/dev | awk '{print $1":"$5}'
/dev/vda1:42%
/dev/vdb1:1%
/dev/vdb2:28%
/dev/vdb3:1%

拿到各個分區(qū)的使用率后,下面就是對其進行循環(huán)遍歷,依次判斷各個分區(qū)的使用情況。

下面給出完成的代碼:

#!/bin/bash
# 監(jiān)控分區(qū)的空間使用情況,超過預設值告警
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:~/bin
export LANG=en

# 分區(qū)空間使用率閥值
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

因為我們是要做實時的監(jiān)控,所以腳本里使用了死循環(huán),表示此腳本不會停會一直循環(huán)執(zhí)行。當然,執(zhí)行速度也是要做限制的,不然占用太多服務器資源就不太好了。所以這里使用了sleep 10,表示10秒監(jiān)控一次。

另外這里還要一點需要注意,就是過濾掉百分號%。這里我們使用了cut命令來過濾掉%,然后拿到純數字型的分區(qū)使用率和預設值做比較。

關于shell編程實戰(zhàn)之如何監(jiān)控磁盤分區(qū)的使用率就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI