echo "$service is down at $(date +%Y%m%d%H:%M:%S)" >>/usr/monitor/process/process_$(date +%Y%m%d).log
echo "$service is down at $(date +%Y%m%d%H:%M:%S)" | mail -s "$IP
服务器 $service服务关闭告警"
流量监控脚本
###############################################################################
#!/bin/bash
#
R1=`cat /sys/class/net/eth0/statistics/rx_bytes`
T1=`cat /sys/class/net/eth0/statistics/tx_bytes`
sleep 1
R2=`cat /sys/class/net/eth0/statistics/rx_bytes`
T2=`cat /sys/class/net/eth0/statistics/tx_bytes`
TBPS=`expr $T2 - $T1`
RBPS=`expr $R2 - $R1`
TKBPS=`expr $TBPS / 1024`
RKBPS=`expr $RBPS / 1024`
echo "上传速率 eth0: $TKBPS kb/s 下载速率 eth0: $RKBPS kb/s at $(date +%Y%m%d%H:%M:%S)" >>/usr/monitor/network/network_$(date +%Y%m%d).log
###############################################################################
流量监控日志 /usr/monitor/network/network_$(date +%Y%m%d).log
流量分析脚本
###############################################################################
#!/bin/bash
#
TX=0;
RX=0;
MAX_TX=0;
MAX_RX=0;
while read line
do
a=`echo $line | grep "eth0" |awk '{print $3}'`
if [ $a -ge 0 ]
then
TX=$a
if [ $TX -ge $MAX_TX ]
then
MAX_TX=$TX
fi
fi
b=`echo $line | grep "eth0" |awk '{print $7}'`
if [ $b -ge 0 ]
then
RX=$b
if [ $RX -ge $MAX_RX ]
then
MAX_RX=$RX
fi
fi
done < /usr/monitor/network/network_$(date +%Y%m%d).log
echo "最高上传速度为 $MAX_TX kb/s at $(date +%Y%m%d)">>/usr/monitor/network/tongji.log
echo "最高下载速度为 $MAX_RX kb/s at $(date +%Y%m%d)">>/usr/monitor/network/tongji.log
###############################################################################
流量分析日志 /usr/monitor/network/tongji.log
利用脚本进行系统监控是一个不错的选择,简单实用。之后我还想到用shell脚本进行对myqsl的监控,对日志增长的监控,对apache连接数监控等等,这个有待后面的研究了。
利用shell脚本进行监控当然是方便,可靠,但单靠一堆数据日志,很难发现什么趋势变化,再加上当你维护的服务器量较多的时候,更是手忙脚乱的。这里我推荐一些开源的监控工具来帮助大家更好地去做好系统监控。
Cacti,是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。它通过snmpget来获取数据,使用 RRDtool绘画图形。在众多监测图形分析工具中,RRDTool所画的图是最好看的,而且Cacti还能定制模板,按需增加插件,功能十分强大。想要实现异常通知功能的话,可以整合Nagios来一起使用。Nagios是一个监视系统运行状态和网络信息的监视系统。能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等。同时提供一个WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等。Cacti+Nagios这个组合很好用,但配置过程比较复杂,大家可以尝试去搭建一个这样的实用而方便的分布式监控系统。
另外一个要介绍的监控工具叫Zabbix,除了能监视各种网络参数,保证服务器系统的安全运营之外,还能提供如短信、邮件、jabber等通知机制以让系统管理员快速定位/解决存在的各种问题。基本上能实现cacti+nagios的功能。安装配置过程也比较简单,我的博客上有在ubuntu环境和centos环境下搭建zabbix监控系统的文章,大家有空可以参考一下。
zabbix的性能监控分析图
其实除了以上提到的shell脚本和监控方案,要使服务器监控的效果更好,还有一项工作是必须做的,就是监控数据及运维操作的记录,我这里把它叫做运维日志吧。每天有写运维日志的习惯是很重要的,这可以有利于我们分析服务器的趋势,比如增加哪些服务后,服务器的cpu占用会有上升的趋势;哪个时段是流量的高峰期;哪个时段服务器比较空闲,可以进行数据库备份的操作等等。更有好处的是,把我们日常的操作行为通过日志形式记录下来,万一除了什么问题,可以通过查询操作日志,了解是否人为操作而引起的。最后一点,有几个重要的性能监测工具可别忘记了,top、vmstat、w、uptime、ps、free、iostat、netstat、/proc等,这些是Linux系统内置或附件的工具,记住每个命令的详细用法,有时候就可以直接找出造成性能问题的原因了。
关于服务器监控这个话题,很多专家给出了不同的意见,但无可否认的,监控工作必须做,至于监控什么是重点,用怎样的监控方式去实现,通过监控能达到多大的效果,这个就视乎服务器应用需求及个人需求了,本文只是提出一些个人的见解,供大家参考。最后简单总结一下本文的主要内容:监控的重要性;shell监控脚本;开源监控方案;记住写运维日志和常用Linux监控工具。希望大家都能够找出适合自己的、适合企业的服务器监控方案。