应用系统日志采集解决方案(转)
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
相关文章推荐
- [sh]uniq-sort-awk
- iOS UITableView3
- 仿QQ侧滑边栏
- static关键字
- 第5周-项目4-长方柱类
- android中View的工作原理(android内核学习记录)
- 第五周项目3(2)
- 大话设计模式—状态模式
- 合并模拟器和真机调试的静态库
- 初识ZooKeeper
- ADS1247寄存器中文翻译
- 第四周项目5-用递归方法求解(2)
- 田忌赛马
- centos最小安装之后,再安装图形界面
- ActiveMQ相关背景(转)
- iOS设计中 UI设计之沙盒与数据持久化
- 推荐几个js的好链接
- 学习笔记5
- java第三次作业
- 【BZOJ1041】[HAOI2008]圆上的整点【数学】