shell指令碼 開發系統監控指令碼

2021-10-25 11:38:36 字數 4637 閱讀 5245

某公司隨著業務的不斷發展,所使用的linux伺服器也越來越多。管理員希望編寫乙個簡單的效能監控指令碼,放到各伺服器中,當監控指標出現異常時傳送告警郵件。

編寫名為sysmon.sh的shell監控指令碼;

監控內容包括cpu使用率,記憶體使用率,根分割槽的磁碟占有率,百分比只需精確到個位;

出現磁碟占有率超過90%,cpu使用率超過80%,記憶體使用率超過90%等情況時,告警郵件通過mail命令傳送到指定郵箱;

分析:監控內容包括cpu使用率,內容使用率,根分割槽的磁碟占有率

df命令,awk命令,mpstat命令(需安裝sysstat軟體包),free命令

磁碟佔用率

[root@client1 ~

]# df -th | grep '/$'

[root@client1 ~

]# df -th | grep '/$'

| awk ''

[root@client1 ~

]# df -th | grep '/$'

| awk ''

| awk -f%

''[root@client1 ~

]# disk=

$(df -th | grep '/$'

| awk ''

| awk -f%

'')

cpu占有率

[root@client1 ~

]# mpstat

[root@client1 ~

]# mpstat | tail -

1| awk ''

[root@client1 ~

]# mpstat | tail -

1| awk ''

| awk -

f. '

[root@client1 ~

]# expr 100-$

(mpstat | tail -

1| awk ''

| awk -f.

'')[root@client1 ~

]# cpu=$

(expr 100-$

(mpstat | tail -

1| awk ''

| awk -f.

''))

記憶體使用率

[root@client1 ~

]# free -m

[root@client1 ~

]# free -m | grep "mem:"

| awk ''

[root@client1 ~

]# free -m | grep "mem:"

| awk ''

[root@client1 ~

]# expr $

(free -m | grep "mem:"

| awk '')/

$(free -m | grep "mem:"

| awk ''

)[root@client1 ~

]# expr $

(free -m | grep "mem:"

| awk ''

) \*

100/

$(free -m | grep "mem:"

| awk ''

)

記憶體使用率

mem=

$(expr $

(free -m | grep "mem:"

| awk ''

) \*

100/

$(free -m | grep "mem:"

| awk ''

))

[root@client1 ~

]# rpm -qa mailx '檢視是否安裝相關軟體包'

mailx-

12.5

-16.el7.x86_64

[root@client1 ~

]# vi /etc/mail.rc

[root@client1 ~

]# echo "123123"

| mail -s "test"

****

****

***@qq.com

setfrom=**

****

****

*@qq.com '傳送郵箱位址'

set smtp=smtp.qq.com '郵箱使用的smtp伺服器的網域名稱'

set smtp-auth-user=

[email protected] 'smtp郵件傳送時登入的賬號'

set smtp-auth-password=

........

'填寫郵箱授權碼'

set smtp-auth=login 'smtp的狀態,登入狀態'

[root@client1 ~

]# vim sysmon.sh

#!/bin/bash

# 磁碟占有率超過90

%,cpu使用率超過80

%,記憶體使用率超過90

%傳送報警郵件

disk=

$(df -th | grep '/$'

| awk ''

| awk -f%

'')cpu=

$(expr 100-$

(mpstat | tail -

1| awk ''

| awk -f.

''))mem=

$(expr $

(free -m | grep "mem:"

| awk ''

) \*

100/

$(free -m | grep "mem:"

| awk ''))

a=/root/alert.txtb=

****

****

***@qq.com

if[ $disk -ge 90

]then echo "磁碟占有率超過90%"

>> $a

fiif

[ $cpu

-ge 80

]then echo "cpu使用率超過80%"

>> $a

fiif

[ $mem -ge 90

]then echo "記憶體使用率超過90%"

>> $a

fiif

[-f $a

]then

cat $a

| mail -s "alert report" $b

rm -rf $a

fi[root@client1 ~

]# chmod +x sysmon.sh

[root@client1 ~

]# .

/sysmon.sh

vi /etc/mail.rc

# for linux and bsd

,this should be set

.set bsdcompat

setfrom

[email protected] '上面有解析'

set smtp=smtp.qq.com

set smtp-auth-user=

[email protected]

set smtp-auth-password=ofuyhifjtxrsdidf

set smtp-auth=login

#!

/bin/bash

# 硬體巡檢,對cpu、記憶體、磁碟超過閾值報警

disk=

$(df -th | grep "/$"

| awk ''

| awk -f%

'')mem=

$(expr $

(free | grep "mem:"

| awk ''

) \*

100/

$(free | grep "mem:"

| awk ''))

cpu=

$(expr 100-$

(mpstat | tail -

1| awk ''

| awk -f.

''))alert_file=

/root/alert.txt

mailbox=

[email protected]

if[ $disk -ge 10

]then echo "磁碟占有率超過85%"

>> $alert_file

fiif

[ $mem -ge 5

]then echo "記憶體占有率超過90%"

>> $alert_file

fiif

[ $cpu -ge 2

]then echo "cpu占有率超過90%"

>> $alert_file

fiif

[-f $alert_file ]

then

cat $alert_file | mail -s "alert report" $mailbox

rm -rf $alert_file

fi

用shell指令碼監控系統

簡單的用shell指令碼寫乙個 監控 程式作為思路,大致為 實時檢測系統的記憶體使用率,如果大於閾值那麼報警 如果有條件可以使用簡訊介面或者實在不行可以使用郵件通知 並記錄到日誌檔案裡,如果小於閾值那麼正常顯示。bin bash check mem 100 free grep i mem awk b...

用shell指令碼監控系統

簡單的用shell指令碼寫乙個 監控 程式作為思路,大致為 實時檢測系統的記憶體使用率,如果大於閾值那麼報警 如果有條件可以使用簡訊介面或者實在不行可以使用郵件通知 並記錄到日誌檔案裡,如果小於閾值那麼正常顯示。bin bash check mem 100 free grep i mem awk b...

Shell指令碼監控Linux系統CPU使用率

通過top或者htop命令。可以看到每乙個cpu核心的使用情況,但是伺服器的整體cpu使用情況,就無法直觀的看到。需要通過shell指令碼才能實現。cpu ck.sh bin bash environment variable source etc profile cpu cpu us vmstat...