[文章作者:张宴 本文版本:v1.0 最后修改:2008.06.25 转载请注明原文链接:http://blog.zyan.cc/read.php/354.htm]

  最近,在我原有的“Linux服务器系统监控程序”基础上,完善了HTTP、TCP、MySQL主动监控与MSN、E-mail、手机短信报警。监控程序以shell和PHP程序编写,以下为主要框架与部分代码:

  一、系统监控接口程序(interface.php)具有的报警方式
  1、MSN实时报警
  ①、监控程序每次检测到故障存在、或者故障恢复,都会发送短消息到管理员的MSN。
  点击在新窗口中浏览此图片

  点击在新窗口中浏览此图片

  发送MSN短消息用了一个PHP类:sendMsg,使用该PHP类发消息,必须将发送、接收双方的MSN加为联系人,发送中文时,先用iconv将字符集转为UTF-8:
引用
$sendMsg->sendMessage(iconv("GBK", "UTF-8", $message), 'Times New Roman', '008000');




  2、手机短信报警
  ①、工作日早上10点之前,晚上6点之后,以及周六、周日,监控程序检测到故障,会调用手机短信接口,发送短信给管理员的手机。
  ②、如果监控程序多次检测到同一台服务器的同一类故障,只会在第一次检测到故障时发送一条“故障报警”短信。服务器故障恢复后,监控程序会再发送一条“故障恢复”短信。

  如果没有手机短信网关接口,可以试试中国移动通信的www.139.com邮箱,具有免费的邮件到达手机短信通知功能,可以将收到的邮件标题以短信的形式发送到手机上。



  3、电子邮件报警
  ①、如果监控程序多次检测到同一台服务器的同一类故障,只会在第一次检测到故障时发送一封“故障报警”邮件。服务器故障恢复后,监控程序会再发送一封“故障恢复”邮件。

  系统监控接口程序interface.php(核心部分,仅提供部分代码):


  二、主动探测监控(“监控机”主动探测“被监控机”)
  1、HTTP服务器监控
  脚本:/data0/monitor/http.sh
引用
#!/bin/sh
LANG=C

#被监控服务器、端口列表
server_all_list=(\
192.168.1.1:80 \
192.168.1.2:80 \
192.168.1.3:80 \
)

date=$(date -d "today" +"%Y-%m-%d_%H:%M:%S")

#采用HTTP POST方式发送检测信息给接口程序interface.php,接口程序负责分析信息,决定是否发送报警MSN消息、手机短信、电子邮件。
send_msg_to_interface()
{
   /usr/bin/curl -m 600 -d menu=http -d date=$date -d ip=$server_ip -d port=$server_port -d status=$status http://127.0.0.1:8888/interface.php
}

server_all_len=${#server_all_list[*]}
i=0
while  [ $i -lt $server_all_len ]
do
   server_ip=$(echo ${server_all_list[$i]} | awk -F ':' '{print $1}')
   server_port=$(echo ${server_all_list[$i]} | awk -F ':' '{print $2}')
   if curl -m 10 -G http://${server_all_list[$i]}/ > /dev/null 2>&1
   then
     #status:    0,http down    1,http ok    2,http down but ping ok
     status=1
           echo "服务器${server_ip},端口${server_port}能够正常访问!"
   else
       if curl -m 30 -G http://${server_all_list[$i]}/ > /dev/null 2>&1
       then
           status=1
           echo "服务器${server_ip},端口${server_port}能够正常访问!"
       else
           if ping -c 1 $server_ip > /dev/null 2>&1
           then
               status=2
               echo "服务器${server_ip},端口${server_port}无法访问,但是能够Ping通!"
           else
               status=0
               echo "服务器${server_ip},端口${server_port}无法访问,并且无法Ping通!"
           fi
       fi
   fi
 send_msg_to_interface
   let i++
done



  2、TCP服务器监控
  脚本:/data0/monitor/tcp.sh
引用
#!/bin/sh
LANG=C

#被监控服务器、端口列表
server_all_list=(\
192.168.1.4:11211 \
192.168.1.5:11211 \
192.168.1.6:25 \
192.168.1.7:25 \
)

date=$(date -d "today" +"%Y-%m-%d_%H:%M:%S")

#采用HTTP POST方式发送检测信息给接口程序interface.php,接口程序负责分析信息,决定是否发送报警MSN消息、手机短信、电子邮件。
send_msg_to_interface()
{
   /usr/bin/curl -m 600 -d menu=tcp -d date=$date -d ip=$server_ip -d port=$server_port -d status=$status http://127.0.0.1:8888/interface.php
}

server_all_len=${#server_all_list[*]}
i=0
while  [ $i -lt $server_all_len ]
do
   server_ip=$(echo ${server_all_list[$i]} | awk -F ':' '{print $1}')
   server_port=$(echo ${server_all_list[$i]} | awk -F ':' '{print $2}')
   if nc -vv -z -w 3 $server_ip $server_port > /dev/null 2>&1
   then
       #status:    0,http down    1,http ok    2,http down but ping ok
       status=1
       echo "服务器${server_ip},端口${server_port}能够正常访问!"
   else
       if nc -vv -z -w 10 $server_ip $server_port > /dev/null 2>&1
       then
           status=1
           echo "服务器${server_ip},端口${server_port}能够正常访问!"
       else
           if ping -c 1 $server_ip > /dev/null 2>&1
           then
               status=2
               echo "服务器${server_ip},端口${server_port}无法访问,但是能够Ping通!"
           else
               status=0
               echo "服务器${server_ip},端口${server_port}无法访问,并且无法Ping通!"
           fi
       fi
   fi
   send_msg_to_interface
   let i++
done



  3、MySQL服务器监控
  ①、MySQL是否能够连接
  ②、MySQL是否发生表损坏等错误
  ③、MySQL活动连接数是否过多
  ④、MySQL从库是否同步正常
  ⑤、MySQL从库同步延迟时间是否过大
  脚本:/data0/monitor/mysql.php


  4、主动监控守护进程
  脚本:/data0/monitor/monitor.sh
引用
#!/bin/sh
while true
do
   /bin/sh /data0/monitor/http.sh > /dev/null 2>&1
   /bin/sh /data0/monitor/tcp.sh > /dev/null 2>&1
   /usr/local/php/bin/php /data0/monitor/mysql.php > /dev/null 2>&1
   sleep 10
done


  启动主动监控守护进程:
/usr/bin/nohup /bin/sh /data0/monitor/monitor.sh 2>&1 > /dev/null &



  三、被动报告监控(“被监控机”采集数据发送给“监控机”)
  1、磁盘空间使用量监控
  2、磁盘Inode使用量监控
  3、Swap交换空间使用量监控
  4、系统负载监控
  5、Apache进程数监控

  被动监控这部分,在我的文章《写完“Linux服务器监控系统 ServMon V1.1” 》中已经实现,就不再详细写出。



Tags: , , , ,



技术大类 » 其他Unix技术 | 评论(66) | 引用(1) | 阅读(143760)
freeke Email
2008-7-10 11:25
博主,我想请教一下,在interface.php中如何调用sendmsg呢?
哈哈
2008-7-11 15:23
两个字  强悍  不知道sina其他人是不是都很牛啊
hesuhai64
2008-7-11 19:46
很好的方法,学习...
terry
2008-8-1 11:38
好东西,以前用nagios就觉得不错了,可惜php不熟悉,要是有python的就好了
小弟
2008-8-2 09:53
磁盘Inode使用量监控

想问下监控这项的目的,为啥要监控他呢?
守住每一天
2008-8-14 10:58
http.sh  这个脚本能否用到nagios上呢?
结合起来报警发短信或邮件。
Dj Homepage
2008-8-28 13:23
张大哥,太强了。。学习了。!
kevin
2008-9-2 16:42
太强悍了,自己写出这样的监控!不过nagios更强悍呀,为什么不写写这方面的文章
lulu
2008-9-15 23:25
拜读ing
2008-9-16 17:17
cool
领教了~~真正的网管
topkey
2008-9-19 18:52
受教,先收藏,后研究
test
2008-12-31 14:54
如果用python来写这个可能代码会少的多的多
lorry
2009-2-13 10:11
写的不错,不过还在学习当中!
北京一夜
2009-5-31 10:45
看了你的文章,才感觉到我在学校机房里的时候都荒废了! 彻悟
华晨 Homepage
2009-7-9 23:02
正在写自己的博客程序,在这学习到好多呀,谢谢博主的分享!
游客
2009-11-23 11:38
能不能提供打包下载呀?哈哈。
a
2009-12-22 10:06
本以为linux是开源的,那学linux用linux的技术人也会有这种开源的思想,看来并不是这样的。。。
huaanjiuyuan Homepage
2010-6-7 12:04
不错一直在使用nagios 和cacti
软猬甲 Homepage
2010-10-18 16:28
这里有一个现成的扣扣机器人 可以实现和qq通信
dresses Email Homepage
2011-7-26 10:13
Here are a variety of the empire <a href="http://www.romancearound.com/">dresses</a>, I want to introduce yourself. The first shoulder chiffon <a href="http://www.romancearound.com/bridesmaid-dresses-c-197.html">bridesmaid dresses</a> empire style wedding will <a href="http://www.romancearound.com/wedding-dresses-trumpet-wedding-dresses-c-180_253.html">trumpet wedding dresses</a>.This Tia cowries, dressed in her wedding day.Chiffon of the empire the best clothes, because they are the size of the drum as complete motion from the wind the site makes it easy to create a plan impression.One romantic flowers floating above shoulder function and help catch the eyes of the cut of the chest and neck problems, so that more comprehensive coverage of physical illusion bust.Clothing do not like big long torso, short legs, or pear-shaped<a href="http://www.romancearound.com/bridesmaid-dresses-ankle-length-bridesmaid-dresses-c-197_198.html">ankle length bridesmaid dresses</a> figure.special is also suitable for pregnant brides since the mobility as a dress can accommodate more Many of the abdomen.
分页: 2/4 第一页 上页 1 2 3 4 下页 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]