您的位置:首页 > 其它

应用系统日志采集解决方案(转)

2016-03-28 20:28 309 查看

概述

基于Flume + MongoDB,对现有的多个应用系统进行日志采集。

特点

采集范围
每一次用户请求的请求信息。

数据量大

尽量减少现有系统的改动

数据流图

1 package cn.sinobest.asj.log;
2 import java.io.IOException;
3 import java.net.MalformedURLException;
4 import java.net.URL;
5 import java.util.Date;
6 import java.util.HashMap;
7 import java.util.Map;
8 import javax.servlet.Filter;
9 import javax.servlet.FilterChain;
10 import javax.servlet.FilterConfig;
11 import javax.servlet.ServletException;
12 import javax.servlet.ServletRequest;
13 import javax.servlet.ServletResponse;
14 import javax.servlet.http.HttpServletRequest;
15 import org.apache.commons.logging.Log;
16 import org.apache.commons.logging.LogFactory;
17 import org.json.JSONObject;
18 import cn.sinobest.asj.log.wsimport.ISALog;
19 import cn.sinobest.asj.log.wsimport.InvalidFormatExceptioin_Exception;
20 import cn.sinobest.asj.log.wsimport.InvalidGradeException_Exception;
21 import cn.sinobest.asj.log.wsimport.SALogImplService;
22 public class LogFilter implements Filter {
23     static final Log log = LogFactory.getLog(LogFilter.class);
24     static final String WSDL_LOCATION = "http://localhost:8080/logserv/log.action?wsdl";
25     @Override
26     public void destroy() {
27     }
28     @Override
29     public void doFilter(ServletRequest request, ServletResponse response,
30             FilterChain chain) throws IOException, ServletException {
31         try {
32             log(request);
33         } catch (InvalidFormatExceptioin_Exception e) {
34             e.printStackTrace();
35         } catch (InvalidGradeException_Exception e) {
36             e.printStackTrace();
37         } finally {
38             chain.doFilter(request, response);
39         }
40     }
41     private void log(ServletRequest request) throws MalformedURLException,
42             InvalidFormatExceptioin_Exception, InvalidGradeException_Exception {
43         Map<String, Object> data = new HashMap<String, Object>();
44         data.put("appid", "zfba");
45         data.put("time", new Date());
46         data.put("localAddr", request.getLocalAddr());
47         data.put("localName", request.getLocalName());
48         data.put("localPort", request.getLocalPort());
49         data.put("remoteAddr", request.getRemoteAddr());
50         data.put("remoteHost", request.getRemoteHost());
51         data.put("remotePort", request.getRemotePort());
52         // data.put("serverName", request.getServerName());
53         // data.put("serverPort", request.getServerPort());
54         HttpServletRequest hrequest = (HttpServletRequest) request;
55         data.put("pathInfo", hrequest.getPathInfo());
56         data.put("pathTranslated", hrequest.getPathTranslated());
57         data.put("remoteUser", hrequest.getRemoteUser());
58         data.put("requestURI", hrequest.getRequestURI());
59         data.put("requestURL", hrequest.getRequestURL());
60         data.put("servletPath", hrequest.getServletPath());
61         JSONObject cont = new JSONObject(data);
62         URL url = new URL(WSDL_LOCATION);
63         SALogImplService ss = new SALogImplService(url);
64         ISALog service = ss.getSALogImplPort();
65         service.log("info", cont.toString());
66     }
67     @Override
68     public void init(FilterConfig arg0) throws ServletException {
69     }
70 }


web.xml
这里仅贴出新增的内容:

<!-- 测试日志 -->
<filter>
<filter-name>log-filter</filter-name>
<filter-class>cn.sinobest.asj.log.LogFilter</filter-class>
</filter>
<!-- 测试日志 -->
<filter-mapping>
<filter-name>log-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


测试

启动MongoDB
参考《Flume学习应用:Java写日志数据到MongoDB》

配置并启动Flume
参考《Flume学习应用:Java写日志数据到MongoDB》

启动日志服务
参考《在web项目中发布jaxws》

启动应用系统,并进行访问

查看MongoDB数据库
参考《Flume学习应用:Java写日志数据到MongoDB》

附录

相关文章

Flume学习应用:Java写日志数据到MongoDB
博客园:Flume学习应用:Java写日志数据到MongoDB

在web项目中发布jaxws
博客园:在web项目中发布jaxws

基于wsimport生成代码的客户端
博客园:基于wsimport生成代码的客户端
http://www.cnblogs.com/ywjy/p/5259291.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: