很早之前就喜欢用移动的139的手机邮件来设置nagios报警邮件,当时联通的手机邮件短信功能还不是特别成熟,我尝试了如下的一些用法,感觉还是非常方便的;139的手机邮配置比较简单,而且短信报警很快,曾经系统组的同事为这个问题投拆过,在这里我以用了5年多的邮通号为例,这个其实在的“邮件到达通知”一项,我们按照如下图示设置:
一、在公网服务器上实时监控重要的网站。
这个可以作为nagios的辅助功能,这样我们就没有必要去购买配置的即时扫描网站的预警服务了,脚本内容如下:
- #!/bin/bash
- while :
- do
- status=`curl -s --head | awk '/http/ {print $2}'`
- if [ "$status" == "200" ]
- then
- :
- else
- echo "1paituan.com is critical" | mail -s "1paituan.com is critical.please check " 1309889xxxx@wo.com.cn
- fi
- sleep 5
- done
然后我们将些脚本放在后台执行,命令如下:
nohup sh /root/monitor.sh &
二、我帮许多朋友配置网站时,用的都是mysql主从方案,有时顺便把他们监测下,以前发过此监控脚本第一版,这个是更改后的第二版,增加了data参数,可以准确定位是哪一个时间点mysql主从出现了问题,并修正了第一版的一些bug,脚本内容如下:
- #crontab time 00:10
- #!/bin/bash
- #check mysql_slave status
- #crontab time 00:10
- mysqlport=`netstat -na|grep "listen"|grep "3306"|awk -f[:" "] '{print $4}'`
- mysqlip=`ifconfig eth0|grep "inet addr" | awk -f[:" "] '{print $4}'`
- io_env=`echo $status | grep io | awk ' {print $2}'`
- sql_env=`echo $status | grep sql | awk '{print $2}'`
- data=`date "%y-%m-%d %h:%m:%s"`
-
- if [ "$mysqlport" == "3306" ]
- then
- echo "mysql is running"
- else
- echo $mysqlip mysql is down" | mail -s "warn!server: $mysqlip mysql is down" 1309889xxxx@wo.com.cn
- fi
-
- if [ "$io_env" = "yes" -a "$sql_env" = "yes" ]
- then
- echo "slave is running!"
- else
- echo "slave is not running!" | mail -s "warn! $data $mysqlip mysql slave is not running" 1309889xxxx@wo.com.cn
- fi
然后每10分钟运行一次,即vim /etc/crontab
*/10 * * * * root sh /root/mysql_slave.sh
大家如果考虑用手机邮的话,有些事情也请注意一下:
一、linux服务器本身就有sendmaiil服务的,它发送邮件的功能的效果就不错,没必要再经过公司的邮箱服务器中转,我们以前尝试过,失败了;
二、发现联通的号延迟问题、到达问题还是很多,建议大家还是以移动的号为主;
三、这种报警策略只是作为nagios的辅助而已。