linux服务监控框架[[转]]


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

  系统监控接口程序interface.php(核心部分,仅提供部分代码):
view plain print ?
  1. <?php  
  2. //HTTP服务器监控  
  3. if (htmlspecialchars($_POST["menu"]) == "http")     
  4. {     
  5.     $date = htmlspecialchars($_POST["date"]);     
  6.     $ip = htmlspecialchars($_POST["ip"]);  
  7.     $port = htmlspecialchars($_POST["port"]);  
  8.     $status = htmlspecialchars($_POST["status"]);//状态,0表示无法访问,1表示正常,2表示无法访问但能ping通  
  9.     //...下一步处理(省略)...    
  10. }  
  11.   
  12. //TCP服务器监控  
  13. if (htmlspecialchars($_POST["menu"]) == "tcp")     
  14. {     
  15.     $date = htmlspecialchars($_POST["date"]);     
  16.     $ip = htmlspecialchars($_POST["ip"]);  
  17.     $port = htmlspecialchars($_POST["port"]);  
  18.     $status = htmlspecialchars($_POST["status"]);//状态,0表示无法访问,1表示正常,2表示无法访问但能ping通  
  19.     //...下一步处理(省略)...  
  20. }  
  21.   
  22. //MySQL服务器监控  
  23. if (htmlspecialchars($_POST["menu"]) == "mysql")     
  24. {     
  25.     $date = htmlspecialchars($_POST["date"]);     
  26.     $ip = htmlspecialchars($_POST["ip"]);  
  27.     $port = htmlspecialchars($_POST["port"]);  
  28.     $abstract = htmlspecialchars($_POST["abstract"]);//故障摘要(必须为全角)  
  29.     $info = htmlspecialchars($_POST["info"]);//故障详细描述  
  30.     $failback = htmlspecialchars($_POST["failback"]);//如果服务器存活,此处接收的值为active  
  31.     //...下一步处理(省略)...  
  32. }  
  33. ?>  

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

#!/bin/sh                     *********这个脚本用的是sh不是bash*******
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()                //传送参数给interface.php文件,这是一个函数下面while循环里面会调用!
{
   /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[*]}                //获取server_all_list数组中元素的个数
i=0
while  [ $i -lt $server_all_len ]
do
   server_ip=$(echo ${server_all_list[$i]} | awk -F ':' '{print $1}')        //awk命令提取ip地址
   server_port=$(echo ${server_all_list[$i]} | awk -F ':' '{print $2}')    //awk命令提取端口
   if curl -m 10 -G http://${server_all_list[$i]}/ > /dev/null 2>&1            //if循环,如果curl命令可以执行就执行循环里面的内容,如果不能正确执行就执行下一个循环!!
   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        //调用函数send_msg_to_interface ,向php脚本传送数据!!
   let i++

done


你可能感兴趣的:(linux服务监控框架[[转]])