日志架构(六)服务端设计

方案图


模块
前端http日志接口
分为single log,array logs;
修改nginx配置,支持超长URL的提交;
日志采用logrotate切割,结合crontab实现分钟切割;

收集器
主要采用flume
与nginx同机器部署agent,收集到collector,最终保存到hadoop1中;
主要采用rsync
在前端nginx服务器上开通rsync服务器端,具体开通办法可以参考:系统技术文档0005:部署rsync服务器,然后在hadoop的集群机器上将日志收集到本地,收集完成后删除前端日志服务器上相应的文件。Rsync收集命令如下:
rsync -azu --remove-sent-files $IP::NGINXLOG/logcenter.$THISHOUR*.log $MYPATH
收集之后把日志上传到hadoop集群。收集器每小时的第5分钟运行,收集上个小时生成的日志。日志上传到hadoop集群后调用解析器,解析日志。
收集器脚本:lcrsync.sh

解析器
均实现map/reduce接口
格式解析器:从hadoop1读取消息,结合配置数据库,将消息解析(csv)并保存到hadoop1;负责拷贝解析后的日志从hadoop1到hadoop2
拷贝有3中方案:
Hadoop distcp <srcurl> <desturl> copy file or directories recursively
flume收取
rsync
Hadoop2的目录/logcenter/dest
内容解析器:将解析后的日志格式(csv),插入到hive中

配置数据库
主要保存日志格式相关信息

集群管理器(待定)
使用zookeeper实现
监控收解析器的工作状态
解析器集群锁

日志中心管理系统
提供配置数据库的UI
结合日志配置提供日志开发文档
监控相关UI

配置数据库设计
具体字段及含义,请直接参照日志中心数据库SQL脚本


log_system:系统表
log_info:日志表
log_parameter:参数表
log_format:格式表
log_record:记录表
具体SQL脚本,请见附件

E-R图,如下所示:


接口设计
single log


array logs


Transfer logs


关于准实时收集方案
Hadoop1为存放原始日志和CSV日志的集群
Hadoop2是用于hive分析的集群(运行hive会启动很多task和job)
对于准实时收集日志的方案。目前经过考虑有以下几种办法:
Flume collector中开发插件,边收集边解析,直接将结果存入到hadoop2中
开发tomcat,直接受理http请求,生成CSV文件,flume agent来收集并放入hadoop2中
开发nginx插件,解析请求生成CSV放入日志文件中,flume agent来收集并放入hadoop2

猜你喜欢

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