首页 > 代码库 > 《shell脚本系统监控-------邮件告警》

《shell脚本系统监控-------邮件告警》

     我与众多同学一样,在没有学习shell编程之前是对shell编程是一头雾水的,然而它能做什么我也不知道,就是觉得能够使用一个与别人不一样的方式去管理系统。现在我慢慢的懂shell的重要性,为小型的机房里面做一个小小的shell监控足够,当然大型的机房不能使用shell来监控系统,因为大型机房监控的机器有很多,而它们的状态是以报表和图形界面的形式来汇报问题的。


    接下来我写一篇关于怎么用shell来进行系统监控并在进行发送邮件。


创建一个文件:

vim monitor.sh

#/bin/bash             ----默认执行方式

#以下为变量:

HOST=`hostname`        ---输出当前系统的机器名
SYS=`uname -a`         ---输出当前系统信息
DATE=`date "+%F %H:%M:%S"`       ---输出当前系统时间
WEB=/var/www/html/$HOST.html        ---创建当前系统的网站的网页(以该脚本命名)
CPU=`cat /proc/cpuinfo |grep processor | wc -l`    ---输出当前系统的CPU信息(作为判断信息)
ID=`vmstat | awk ‘NR==3{print $15 }‘`        ----输出当前系统CPU的IP号码
WA=`vmstat | awk ‘NR==3{print $16 }‘`        ---输出系统的I/O的等待百分比
LOAD=`w | awk ‘NR==1{print $8}‘ |awk -F "," ‘{print $1}‘`       ---输出系统的负载值
DISK=`df -h |awk ‘NR==3{print $4}‘ |awk -F "%" ‘{print $1}‘`    ---输出硬盘的已经使用值
FREE=`free -m | awk ‘NR==2{print $4}‘`        ----输出内存空闲值
CACHE=`free -m | awk ‘NR==2{print $7}‘`       ----输出内存缓存值
TCP=`netstat -atunlp`            ----输出当前系统的网络链接状态
IF=`iftop -i eth0 -P -Nn -L 100 -s 1 -t >>$WEB`        ---输出系统的eth0接口的状态



#以下是执行上面所做的变量的输出
#在这里对cpu的线程数,CPU的LOAD,系统磁盘的状态,内存剩余。这四个做一个邮件的告警

echo "design for leoheng"

echo "######---主机名---##########"
echo hostname=`echo $HOST`


echo "######---系统参数---########"
echo system=`echo $SYS`
    
    
echo "######---CPU线程数---#######"
echo processor=`echo $CPU`
if [ $CPU -eq 4 ];then
`echo "wa=$WA and id=$ID cpu processor is ok" | mail -s "$HOST CPU" xxxxxxxx@qq.com`
else
`echo "wa=$WA and id=$ID cpu processor have problem" | mail -s "$HOST CPU" xxxxxxxx@qq.com`
fi


echo "######---CPU的ID---#########"
echo cpu~id=`echo $ID`


echo "######---CPU的WA---#########"
echo cpu~wa=`echo $WA`


echo "######---CPU的LOAD---#######"
echo cpu-load=`echo $LOAD`
if [ $LOAD > 0.05 ];then
`echo "CPU-LOAD is beyond the rate" | mail -s "CPU-LOAD" xxxxxxxx@qq.com`
else
`echo "CPU-LOAD is ok" | mail -s "CPU-LOAD" xxxxxxxx@qq.com`
fi



echo "######---系统磁盘的状态---##"
echo disk-status=`echo $DISK`
if [ $DISK > 80 ];then
`echo "SYSTEM-DISK is beyond the 80%" | mail -s "SYSTEM-DISK" xxxxxxxx@qq.com`
else
`echo "SYSTEM-DISK is ok" | mail -s "SYSTEM-DISK" xxxxxxxx@qq.com`
fi



echo "######---内存剩余---########"
echo memory=`echo ($FREE+$CACHE) KB`
     memory=$(($FREE+$CACHE))
echo $memory
if [ $memory < 1000 ];then
`echo "SYSTEM-memory less than 1000M " | mail -s "SYSTEM-memory" xxxxxxxx@qq.com`
        else
                `echo "SYSTEM-memory is ok" | mail -s "SYSTEM-memory" xxxxxxxx@qq.com`
        fi
        
        
        
echo "######---TCP相关连接状态----#"
echo tcp-status=`echo $TCP`



echo "######---eth0的流量---######"
echo $IF


echo "END"
####----退出shell之后---#####
#部分同学的邮件无法发出,可能由于一下两个原因
1.没有安装mailx软件包
yum install -y mailx  sendmail


2.系统设置没有做以下操作,将inet_interfaces选项改为all,如下
vim /etc/postfix/main.cf

inet_interfaces = all


本文出自 “leoheng” 博客,请务必保留此出处http://leoheng.blog.51cto.com/12202141/1955773

《shell脚本系统监控-------邮件告警》