5 監控磁碟使用率

2021-09-09 06:19:29 字數 4059 閱讀 5420

雖然對於磁碟的監控屬於最基礎的監控,但是很多時候往往因為疏忽而忽略監控磁碟,最終導致事故發生,磁碟監控還是需要重視起來。本案例就是要監控磁碟使用率。

具體要求如下:

1)每分鐘檢測一次磁碟狀況;

2)當磁碟空間使用率或inode使用率高於90%,需要發郵件告警,假設收件郵箱為[email protected]

3)統計使用率超過90%的分割槽所有子目錄的大小,並把排名前3的子目錄寫到郵件內容中發給上面的郵箱;

4)第一次告警後,如果沒有及時處理,則需要每隔30分鐘告警一次;

5)每分鐘指令碼執行時,需要檢查指令碼是否執行完,如果沒有執行完則本次不執行。

郵件指令碼如下:

#!/usr/bin/python

#coding:utf-8

import smtplib

from email.mine.text import mimetext

import sys

mail_host =

'stmp.163.com'

mail_user =

'[email protected]'

mail_pass =

'your_mail_password'

mail_postfix =

'163.com'

defsend_mail

(to_list,subject,content)

: me =

"zabbix 監控告警平台"

+"<"

+mail_user+

"@"+mail_postfix+

">"

msg = mimetext(content,

'plain'

,'utf-8'

) msg[

'subject'

]= subject

msg[

'from'

]= me

msg[

'to'

]= to_list

try: s = smtplib:smtp(

) s.connect(mail_host)

s.login(mail_user,mail_pass)

s.sendmail(me,to_list,msg.as_string())

s.close(

)return

true

except exception,e:

print

str(e)

return

false

if __name__ ==

"__main__"

send_mail(sys.ar**[1]

, sys.ar**[2]

, sys.ar**[3]

)

# vim /usr/local/sbin/disk_check.sh
#!/bin/bash

#監控磁碟使用情況,做郵件告警及告警收斂

#把指令碼名字存入變數s_name

s_name=

`echo $0|

awk -f '/'''`

#定義收件人郵箱

mail=

"/usr/local/sbin/mail.py"

[email protected]

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

chk_sp()'

> /tmp/chk_sp.log

n=`wc -l /tmp/chk_sp.log |

awk''

` if

[$n -gt 0 ]

then

tag=1

for d in

`awk

'' /tmp/chk_sp.log`

dofind

$d -type d |

sed'1d'

|xargs

du -sm |

sort -nr |

head -3 #找到使用率超過90%的分割槽下面大小排名前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()'

` #檢視$log檔案最後一行的時間戳

echo

$t_s

>> /tmp/$log

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

v=$[

$t_s-$t_s2

]#取兩次時間戳差值if[

$v -gt 1800 ]

#差值如果超過1800s,立即發郵件

then

python $mail

$mail_user

"磁碟使用率超過90%"

"`cat $2`

" 2>/dev/null #發郵件,$2為mail函式第二個引數,這裡是乙個檔案

echo

"0"> /tmp/$log.count #定義計時器臨時檔案,並寫入0

elseif[

! -f /tmp/$log.count ]

then

echo

"0"> /tmp/$log.count #如果計時器臨時檔案不存在,需要建立並寫入0

fi

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

nu2=$[

$nu+1]

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

echo

$nu2

> /tmp/$log.count

if[$nu2 -gt 30 ]

then

python $mail

$mail_user

"磁碟使用率超過90%已經持續30分鐘了"

"`cat $2`

" 2>/dev/null

echo

"0"> /tmp/$log.count #第二次告警後,計數器歸0

fifi

}#把程序情況存入臨時檔案

ps aux |

grep

"$s_name"

|grep -ve "$$|grep"

> /tmp/ps.tmp

p_n=

`wc -l /tmp/ps.tmp |

awk''

`#當程序數大於0,則說明上次的指令碼還未執行完if[

$p_n -gt 0 ]

then

exit

fichk_sp

chk_inif[

$tag

== 1 ]

then

m_mail chk_sp /tmp/most_sp.txt #執行m_mail函式傳送郵件,$1是chk_sp,$2是/tmp/most_sp.txt

elif

[$tag

== 2 ]

then

m_mail chk_in /tmp/chk_in.log #執行m_mail函式傳送郵件,$1是chk_in,$2是/tmp/chk_in.log

fi

增加計畫任務:

* * * * * /bin/bash /usr/local/sbin/disk_check.sh
指令碼中,

1)$0表示指令碼本身,awk中$nf表示最後一段的值,去掉絕對路徑,剩下指令碼名字寫入變數$s_name

2)$$為本程序pid,grep -ve "$$|grep"排除本程序和grep程序

故障監控 磁碟使用率告警

本篇將介紹磁碟占用過多的處理方案。linux下使用df hl可以檢視當前伺服器使用情況。應用伺服器上一般來說,持續寫入,產生巨大的檔案,一般是日誌類檔案,如果是db的伺服器的話,要注意資料的增長率。使用df h檢視伺服器磁碟占用情況 使用find size 100m xargs ls lh查詢大檔案...

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

本指令碼來自有學習阿銘的博文學習 公司監控最基本的一般都要監控磁碟的使用情況,否則將導致業務上的事故。一般監控要求如下 每分鐘都要掃瞄一下磁碟的狀況。當磁碟空間使用率或者inode使用率高於90 的情況,就需要報警。並把統計使用率超過90 的分割槽的所有的子目錄的,按照大小依次排列,把前3的目錄名稱...

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...