首页
学习
活动
专区
工具
TVP
发布

玩转mongoDB(九):通过log4jmongo来实现分布式系统的日志统一管理

背景

在分布式系统中,我们有多个web app,这些web app可能分别部署在不同的物理服务器上,并且有各自的日志输出。当生产问题来临时,很多时候都需要去各个日志文件中查找可能的异常,相当耗费人力。日志存储多以文本文件形式存在,当有需求需要对日志进行分析挖掘时,这个处理起来也是诸多不便,而且效率低下。

为了方便对这些日志进行统一管理和分析,我们可以将日志统一输出到指定的数据库系统中,再由日志分析系统去管理。由于这里是mongoDB的篇章,所以主观上以mongoDB来做日志数据存储;客观上,一是因为它轻便、简单,与log4j整合方便,对系统的侵入性低。二是因为它与大型的关系型数据库相比有很多优势,比如查询快速、bson存储结构利于扩展、免费等。

解决方案

整合mongoDB和log4j

1、安装mongoDB数据库,并在本地启动,默认端口是27017,详细请参考:玩转mongoDB(一):初识mongoDB。

2、新建一个maven(maven版本要求3.0以上)工程,选择maven-archetype-quickstart,工程名:log4j2mongo。

3、在pom.xml文件中,添加log4j、log4mongo-java、mongo-java-driver三个依赖。具体代码如下:

4、在resources文件夹中,添加log4j.properties文件。文件中主要添加log4j对mongoDB的适配器org.log4mongo.MongoDbAppender。这里的适配器是log4mongo-java这个jar包提供。mongoDB数据库的ip:127.0.0.1,port:27017,库名:logs,集合名:log。具体配置如下:

6、步骤5中,我们执行了1000万次的日志插入,数据结构如下:

默认的数据量大小有10G:

这里,我们可以看到,日志的数据存储量相对不小。如果需要修改日志数据的存储结构,可以用log4mongo的源代码进行二次开发。

如果数据量过大,我们可以用TTL索引(过期自动删除)或固定集合大小两种方式来解决:

TTL索引:

将log集合修改成固定大小集合:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180224G1AO0J00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券