我与众多同学一样,在没有学习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
原文地址:http://leoheng.blog.51cto.com/12202141/1955773