[导入]跨越LVS,监控后端应用服务器--监控系统开发路上
作者: ecsun 链接:http://papalong.javaeye.com/blog/284637 发表时间: 2008年12月02日
声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!
公司有几百台服务器,很多服务器使用了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的实时监控了.
发送的报警信息,会探测出目前哪台服务器的状况更差,更有针对性,方便系统组用户处理服务器异常.
已有 0 人发表留言,猛击->>这里<<-参与讨论
JavaEye推荐
文章来源:http://papalong.javaeye.com/blog/284637