監控磁碟使用率的shell指令碼

2021-09-20 00:26:15 字數 1981 閱讀 8534

本指令碼來自有學習阿銘的博文學習:

公司監控最基本的一般都要監控磁碟的使用情況,否則將導致業務上的事故。

一般監控要求如下:每分鐘都要掃瞄一下磁碟的狀況。

當磁碟空間使用率或者inode使用率高於90%的情況,就需要報警。

並把統計使用率超過90%的分割槽的所有的子目錄的,按照大小依次排列,把前3的目錄名稱發給到郵箱。

第一次未處理,30分鐘後在一次。

#!/bin/bash

#用途:監控磁碟的使用情況。

#日期:2023年10月18日

#版本:v0.1

#把指令碼名字存在變數l-name

l_name=`echo $0 | awk -f '/' 'print $nf'`

#定義收件人的郵箱

[email protected]

#定義檢查磁碟的空間使用率函式

chk_sp()

'>/tmp/chk_sp.log

n=`wc -l /tmp/chk_sp.log | awk 'print $1'`

if [ $n -gt 0 ]

then

tag=1

for d in `awk '' /tmp/chk_sp.log`

do find $d -type d | sed '1d' | xargs du -sm | sort -nr | head -3

done >/tmp/most_sp.txt

fi}#定義檢查inode使用率函式

chk_in()

'>/tmp/chk_in.log

n=`wc -l /tmp/chk_in.log | awk ''`

if [ $n -gt 0 ]

then

tag=2

fi}#定義告警函式

m_mail()'`

# 取出最後一行及上次告警的時間戳,立即寫入當期的時間戳

echo $t_s >>/tmp/$log

#取兩次時間戳差值

v=$[ $t_s-$t_s2 ]

#如果差值超過100,立即傳送郵件。

if [ $v -gt 1800 ]

then

#發郵件,其中$2為mail函式的第二個函式,這裡為乙個檔案

python mail.py $mail_user "磁碟使用率超過90%"

#定義技數器臨時檔案,並寫入0

echo "0" > /tmp/$log.count

else

#如果技數器臨時檔案不存在,需要建立並寫入0

if [ ! -f /tmp/$log.count }

then

echo "0" > /tmp/$log.count

finu=`cat /tmp/$log.count`

#30分鐘內每發生1次告警,計算器加1

nu2=$[ $nu+1 ]

echo $nu2>/tmp/$log.count

#當告警次數超過30次,需要再次髮油件

if [ $nu2 -gt 30 ]

then

python mail.py $mail_user "磁碟使用率90%持續30分鐘了" "`cat $2`" 2>/dev/null

#第二次告警後,將計算器再次從0開始

echo "0" > /tmp/$log.count

fifi

}#把程序數大於0.則說明上次的指令碼還未執行完

if [ $p_n -gt 0 ]

then

exitfi

chk_sp

chk_in

if [ $tag == 1 ]

then

m_mail chk_sp /tmp/most_sp.txt

elif [ $tag == 2 ]

then

m_mail chk_in /tmp/chk_in.log

fi

5 監控磁碟使用率

雖然對於磁碟的監控屬於最基礎的監控,但是很多時候往往因為疏忽而忽略監控磁碟,最終導致事故發生,磁碟監控還是需要重視起來。本案例就是要監控磁碟使用率。具體要求如下 1 每分鐘檢測一次磁碟狀況 2 當磁碟空間使用率或inode使用率高於90 需要發郵件告警,假設收件郵箱為admin admin.com ...

Shell之批量監控主機磁碟使用率

1 本地磁碟監控 use rate list df h awk dev 結果 dev sda1 10 for use rate in use rate list do part name use rate if use rate ge 80 then echo warning part name p...

shell指令碼監控cpu 記憶體使用率 轉

該指令碼檢測cpu和記憶體的使用情況,只需要調整memorysetting cpusetting useremail要發郵件報警的email位址即可 如果沒有配置發郵件引數的哥們,已配置了的,直接飛到 區 1.vim etc mail.rc 2.找到以下內容 set from yangxingyi ...