某公司隨著業務的不斷發展,所使用的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=
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=
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...