公司有几百台服务器,很多服务器使用了LVS,同一个应用会部署在很多不同的服务器上,然后在上层加LVS,这个时候,当后台一台或几台服务服务器宕掉了,前端应用是正常的,通过对URL的监控,不能发现问题.

 

  上周末托管在深圳电信的机器,有一个机柜9台服务器同时断掉,经过查找,最后是外网交换机出现了问题.但这个时候前端应用是正常的,而监控,没有发出报警信息,昨天在监控上面加上新功能,穿过LVS,直接到后端服务器进行监控.

 

   这个服务器的监控,分为两种.

  1:通过SNMP对服务器进行监控.

  2:通过对应用的URL对服务器进行监控.

 

  SNMP主要监控服务器的运行状态.

  URL监控,主要监控应用的实时运行状态.

 

  费话少说,对应用加IP的探测代码如下:

public static Long getResponseTimeByIp(String urlAddress, String ip) {   
        URL url;   
        StringBuffer sb 
= new StringBuffer("");   
        HttpURLConnection conn 
= null;   
        Long responseTime 
= new Long(0);   
        
try {   
            Long openTime 
= System.currentTimeMillis();   
            
// url = new URL("http://m.easou.com/");   
            url = new URL(urlAddress);   
            Proxy proxy 
= new Proxy(Proxy.Type.HTTP, new InetSocketAddress(buildInetAddress(ip), 80));   
            conn 
= (HttpURLConnection) url.openConnection(proxy);   
            conn.setConnectTimeout(
50000);   
            conn.setReadTimeout(
50000);   
            conn.setRequestMethod(
"GET");   
            conn.setDoOutput(
true);   
            conn.setDoInput(
true);   
            BufferedReader bReader 
= new BufferedReader(new InputStreamReader(conn.getInputStream()));   
            String temp;   
            
boolean remaining = true;   
            
while (remaining) {   
                temp 
= bReader.readLine();   
                
if (null != temp) {   
                    sb.append(temp);   
                }
 else {   
                    remaining 
= false;   
                }
   
            }
   
            
int code = conn.getResponseCode();   
            
if (code == 200{   
                Long returnTime 
= System.currentTimeMillis();   
                responseTime 
= returnTime - openTime;   
            }
 else {   
                responseTime 
= new Long("50000" + new Long(code).toString());   
            }
   
        }
 catch (MalformedURLException e) {   
            
// TODO Auto-generated catch block   
            e.printStackTrace();   
            responseTime 
= new Long("60000000");   
        }
 catch (IOException e) {   
            
// TODO Auto-generated catch block   
            e.printStackTrace();   
            responseTime 
= new Long("60000000");   
        }
 finally {   
            
if (null != conn) {   
                conn.disconnect();   
            }
   
        }
   
        
return responseTime;   
    }
  

使用这段代码,就可以对于做了负载均衡的服务器,进行URL的实时监控了.

 

发送的报警信息,会探测出目前哪台服务器的状况更差,更有针对性,方便系统组用户处理服务器异常.