編寫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="root@localhost.localdomain"
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
如下:
650) this.width=650;" title="image001.png" src="http://www.bkjia.com/uploads/allimg/131227/1Q5103H7-0.png" />
這裡使用率都取的小值,為了使驗證結果更加明顯,根據實際環境而有所不同)
附:
a:使用df命令提取根分區的磁碟佔用率:如所示:
使用df-h命令查看磁碟分割的使用方式,其中根分區的已用空間是8%
650) this.width=650;" title="image003.png" src="http://www.bkjia.com/uploads/allimg/131227/1Q51035c-1.png" />
用如中的命令可以過濾磁碟的已用空間
[root@shell ~]# df -h | grep "/$" | awk '{print $4}' | awk -F% '{print $1}'
650) this.width=650;" title="image005.png" src="http://www.bkjia.com/uploads/allimg/131227/1Q5104418-2.png" />
b:使用mpstat命令提取CPU使用率需要先安裝sysstat軟體包)。如所示:其中%idle表示CPU空閑時間百分比
650) this.width=650;" title="image007.png" src="http://www.bkjia.com/uploads/allimg/131227/1Q510D94-3.png" />
650) this.width=650;" title="image009.png" src="http://www.bkjia.com/uploads/allimg/131227/1Q5102923-4.png" />
用如中的命令可以得到CPU已用空間並賦值給變數CUG
[root@shell ~]# cug=$(expr 100 - $(mpstat | tail -1 | awk '{print $10}' | awk -F. '{print $1}'))[root@shell ~]# echo $cug
650) this.width=650;" title="image011.png" src="http://www.bkjia.com/uploads/allimg/131227/1Q5102149-5.png" />
c:使用free命令查看記憶體的使用方式。其中劃紅線的表示空餘記憶體。
650) this.width=650;" title="image013.png" src="http://www.bkjia.com/uploads/allimg/131227/1Q5102I0-6.png" />
第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
650) this.width=650;" title="image015.png" src="http://www.bkjia.com/uploads/allimg/131227/1Q5105620-7.png" />
2、使用chmod命令給sysmon.sh檔案增加執行x)許可權
650) this.width=650;" title="image017.png" src="http://www.bkjia.com/uploads/allimg/131227/1Q510N27-8.png" />
3、測試sysmon.sh指令碼的執行情況
a:本人實驗環境為Linux 5.5,使用其本身內建的sendmail發送郵件驗證:
650) this.width=650;" title="image019.png" src="http://www.bkjia.com/uploads/allimg/131227/1Q5102131-9.png" />
補充:所有發郵件的連接埠都是: 25號連接埠、ICMP協議】
b:確認有可用的郵件伺服器,然後調低監控閾值,執行sysmon.sh指令碼進行測試
c:查收名為root@localhost.localdomain的郵箱生產環境寫具體警示郵箱),確認警告郵件內容
650) this.width=650;" title="image021.png" src="http://www.bkjia.com/uploads/allimg/131227/1Q510D26-10.png" />
郵件內容如下:
650) this.width=650;" title="image023.png" src="http://www.bkjia.com/uploads/allimg/131227/1Q5106304-11.png" />
4、設定crontab計劃任務,每隔半小調用一次sysmon.sh指令碼程式,並重新啟動crond服務。
650) this.width=650;" title="image025.png" src="http://www.bkjia.com/uploads/allimg/131227/1Q51050I-12.png" />
650) this.width=650;" title="image027.png" src="http://www.bkjia.com/uploads/allimg/131227/1Q5101231-13.png" />
5、操作完成。
本文出自 “聽聞” 部落格,請務必保留此出處http://wenzhongxiang.blog.51cto.com/6370734/1213518