標籤:shell
用shell寫了個指令碼同時監控多台主機(監控主機是否線上,cpu,記憶體,硬碟,io使用狀態,並有郵件通知功能),大神看後覺得有不當之處或有更好的實現方式,請不屑筆墨指出。
首先要在被監控主機和監控主機之間建立信任關係,不瞭解ssh認證驗證的可以看看:
http://dragon123.blog.51cto.com/9152073/1586795
安裝mutt:
[[email protected] ~]# yum install mutt
監控列表:
[[email protected] ~]# cat > iplist.txt <<end> 22.22.22.128> 22.22.22.129> 22.22.22.130> 22.22.22.134> end
監控指令碼:
#!/bin/bashfor ip in `cat iplist.txt`;doping $ip -c1>/dev/null #先檢查主機是否線上,如果線上則進行進一步監控if [ $? -eq 0 ];thenhardused=`ssh $ip df -h|grep "/$"|awk ‘{print $4}‘|cut -d% -f 1`memtotal=`ssh $ip free -m|grep Mem|awk ‘{print $2}‘`memused=`ssh $ip free -m|grep Mem|awk ‘{print $3}‘`mem=`expr $memused \* 100 / $memtotal`idelcpu=`ssh $ip top -n1|grep Cpu|awk ‘{print $5}‘|cut -d"." -f1`cpuused=`expr 100 - $idelcpu`if [ $mem -gt 70 ];then #如果記憶體使用量高於70%則郵件通知echo "warm:$ip memory is $mem"|mutt -s "monitor report" [email protected]fiif [ $hardused -le 80 ];then #如果硬碟使用已高於80%則郵件通知echo "warm:$ip the Hard drive capacity is more 80%"|mutt -s"monitor report" [email protected] fifor hardid in `ssh $ip iostat |grep ^sd|awk ‘{print $1}‘`;do #先取盤符iostat=`ssh $ip iostat -x|grep $hardid|awk ‘{print $12}‘|cut -d"." -f1` #取得io繁忙狀態echo $iostatif [ $iostat -gt 80 ];then #如果io繁忙高於80%,則郵件通知echo "ipaddress:$ip,hard:$hardid,iostat:$iostat"|mutt -s"warm" [email protected]fidoneelseecho "host:$ip is not alive"|mutt -s"monitor report" [email protected]om #如果主機無法ping通則郵件通知fidone
每5分鐘監控一次(如果出現什麼問題,並且這個得不到解決,每5分鐘就收到一封郵件,這很令人糾結):
[[email protected] ~]# crontab -e
*/5 * * * * bash /root/monitor.sh
查收郵件:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/57/6C/wKiom1SZix_AScEpAAGCG6cg4vw750.jpg" title="163.png" alt="wKiom1SZix_AScEpAAGCG6cg4vw750.jpg" />
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/57/69/wKioL1SZjIPRo20-AAEUCsrn_a4856.jpg" title="163.png" alt="wKioL1SZjIPRo20-AAEUCsrn_a4856.jpg" />
本文出自 “龍愛雪琪” 部落格,請務必保留此出處http://dragon123.blog.51cto.com/9152073/1594076
shell監控多台主機