編寫SHELL腳本監控主機
1、用vi命令在/root目錄是新建一個腳本文件sysmon.sh:
內容如下:
#!/bin/bash
dug=$(df -h | grep "/$" | awk '{print $4}' | awk -F% '{print $1}')
cug=$(expr 100 - $(mpstat | tail -1 | awk '{print $10}' | awk -F. '{print $1}'))
mug=$(expr $(free | grep "cache:" | awk '{print $3}') \* 100 / $(free | grep "Mem:" | awk '{print $2}'))
alog="/tmp/alert.txt"
AMAIL="[email protected]"
if [ $dug -gt 3 ]
then
echo "磁盤佔用率:$DUG%" >> $alog
fi
if [ $cug -gt 2 ]
then
echo "CPU使用率:$cug%" >> $alog
fi
if [ $mug -gt 2 ]
then
echo "內存使用率:$mug%" >> $alog
fi
if [ -f $alog ]
then
cat $alog | mail -s "Host Alert" $AMAIL
rm -fr $alog
fi
截圖如下:
附:
a:使用df命令提取根分區的磁盤佔用率:如下圖所示:
使用df-h命令查看磁盤分區的使用情況,其中根分區的已用空間是8%
用如下圖中的命令可以過濾磁盤的已用空間
[root@shell ~]# df -h | grep "/$" | awk '{print $4}' | awk -F% '{print $1}'
b:使用mpstat命令提取CPU使用率(需要先安裝sysstat軟件包)。如下圖所示:其中%idle表示CPU空閒時間百分比
用如下圖中的命令可以得到CPU已用空間並賦值給變量CUG
[root@shell ~]# cug=$(expr 100 - $(mpstat | tail -1 | awk '{print $10}' | awk -F. '{print $1}'))[root@shell ~]# echo $cug
c:使用free命令查看內存的使用情況。其中劃紅線的表示空餘內存。
第1行:
total 內存總數: 1035108
used 已經使用的內存數: 500928
free 空閒的內存數: 534180
shared 當前已經廢棄不用,總是0
buffers Buffer Cache內存數: 28968
cached Page Cache內存數: 348204
關係:total = used + free
第2行:
-/+ buffers/cache的意思相當於:
-buffers/cache 的內存數:123756 (等於第1行的 used - buffers - cached)
+buffers/cache 的內存數: 911352 (等於第1行的 free + buffers + cached)
所以:-buffers/cache反映的是被程序實實在在吃掉的內存,而+buffers/cache反映的是可以挪用的內存總數。
第三行單獨針對交換分區:
爲了提高磁盤存取效率, Linux做了一些精心的設計, 除了對dentry進行緩存(用於VFS,加速文件路徑名到inode的轉換), 還採取了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁盤塊的讀寫,後者針對文件inode的讀寫。這些Cache有效縮短了 I/O系統調用(比如read,write,getdents)的時間。
用如下圖中的命令可以得到內存使用率並賦值給變量mug:
[root@shell ~]# mug=$(expr $(free | grep "cache:" | awk '{print $3}') \* 100 / $(free | grep "Mem:" | awk '{print $2}'))
[root@shell ~]# echo$mug
2、使用chmod命令給sysmon.sh文件增加執行(x)權限
3、測試sysmon.sh腳本的執行情況
a:本人實驗環境爲Linux 5.5,使用其本身自帶的sendmail發送郵件驗證:
【補充:所有發郵件的端口都是: 25號端口、ICMP協議】
b:確認有可用的郵件服務器,然後調低監控閾值,執行sysmon.sh腳本進行測試
c:查收名爲[email protected]的郵箱,確認警告郵件內容
郵件內容如下:
4、設置crontab計劃任務,每隔半小調用一次sysmon.sh腳本程序,並重新啓動crond服務。
5、操作完成。