日志架构(四)核心框架

日志数据流

其中在nginx部位,可以获取access.log,用返回的红色箭头获取upstream参数。

日志处理架构




日志中心--存储服务器
1.Nginx:跨域的GET请求1像素的图片,可以记录request,response里的cookie,head,query等信息
http://analytics.xxxx.com/__utm.gif?a=11&b=222&c=333
关键参数:系统key,版本信息,时间戳,日志参数;
OtherClick

多条日志


日志中心--配置服务器(or 配置组件)
http:// analytics.xxxx.com/conf/
供解析模块使用
对外提供page,为开发人员提供配置的UI
用mysql保存日志格式;
主要数据结构:
系统表(systemId,系统名,中文描述,负责人,联系方式),
参数表(parameterId,参数名,参数简写,参数描述,参数位置head,body,common),
日志表(logId,logName,logPath,creater,creaerTime)
格式表(logId,parameterId,index)
关联表(systemId,formatId,logId)
主要确定map参数中的index,达到与日志格式一致的效果

日志过滤器
Filter:处理WEB项目的日志;
在chain.doFilter(request, response);方法之后,直接根据参数规范,从中取出前缀的参数并异步发送GET请求保存日志
重定向发日志
公共参数(系统ID,timestamp)在拦截器(filter,aop)里插入

AOP:处理服务类的日志;
在after处从本地队列中取出,直接异步发送GET请求保存日志

注:实现分为3阶段
1)无缓存
2)过滤器缓存
3)(消息中间件,memcacheQ-支持落地,redis),服务端统一来收集

JS组件
参照GA(1像素图片的跨域请求,后接具体参数及时间戳);
包装发送请求的组件
Other click组件
方案一(废弃):
样式:
<style>
.log_container { display:none; width:0px; heignt:0px; }
</style>

模版:
<div class="log_container">
<input type="hidden" id="" value="" />
<input type="hidden" id="" value="" />
</div>

其中style会定义在公共的css中
方案二:
将参数放到head中,可以解决servlet的日志,请求图片,ajax请求JSON的问题,
特殊字符的处理:html特殊字符,逗号,分号

其中移动网关,有可能会过滤head,需要进一步考虑。

日志组件
javaLogComponent日志公共组件
JSP标签
保存日志的公共前缀
设置单值到request中,自动追加前缀(前端已经取得的数据,后端不传回)
统一日志头到组件中--参考用户中心,WWW/WAP的日志头是统一的
自动缓存发送日志文件到日志中心(可选功能)
单条发送日志到日志中心(可选功能)

日志中心的实现技术
nginx + hadoop + tomcat + flume + mysql

日志中心方案对比
统一nginx 日志中心http接口
日志格式配置 无法结构化管理 可以保存在mysql中
管理UI实现 难度较大 容易
日志文件 分散在nginx 统一在日志服务器上

猜你喜欢

转载自phl.iteye.com/blog/2012228