MongoDB与Log4J的日志集中化管理
客户跟我们合作快一年了,随着业务的增长,机器也在增长,刚刚开始的时候没有人去关注在多台机器上怎么查看日志,因为刚刚开始的时候才有2台应用服务器,现在光是GlassFish(web app) 就有25台,还有JMS的服务器/消息收发 12台,现在30几台机器光是查看日志就能忙死,就好比你电脑中打开了30个窗口,需要一个一个查看,你说能不杯具吗?
现在有 30几台机器,将来也许还会更多,但我们需要查看Java程序在每台机器上运行的情况,如果还跟以前一样的方式似乎不太可行了,需要想想其他办法。
所以设想出3种方案:
1.通过Log4J JDBC插件直接写入 数据库,
2.通过Log4J JMS 插件先向JMS服务器发送消息,JMS服务器接收到消息以后,再向数据库写入
3.通过改装后的 Log4J MongoDB插件 向 MongoDB数据库写入
这样,我们只需要查看一台机器上的log数据就可以知道每台机器的运行状态,将来需要对日志进行分析的话还可以进行二次开发,并且操作方便,可扩展性强。
所以最后选择了第三种向MongoDB写入,从以往大量的测试和经验中得到的实践告诉我们MongoDB和MySQL在执行大量的插入数据的过程中MongoDB更有效。
目前采用了这样的技术架构,如图所示:

查看大图请点击这里
下载测试代码,请点击这里
相关文章:
MongoDB 客户端工具,不断收集ing(图)
MongoDB Java ORM 的设想
mongodb 入门 介绍
MongoDB 集群
MongoDB 主(Master)/从(Slave)数据同步
口水:
这个想法和实践要感谢 Jozef Sevcik 先生和他的开源项目给我带来的灵感,我上面提供的代码例子也发送给Jozef Sevcik 先生的邮箱了,并且很快得到了他的回复,他在来信中说道:
Hello H.E,
I'm sorry for delayed response.
Thank you for your contribution, I'm glad to see people using the project are contributing code back, great !
I'll review your changes during this weekend and let you know,
Thanks,
Jozef
这位国外友人说话非常客气,呵呵
–end–

本文由J2ee企业顾问-黄毅创作,并已采用创作共用署名2.5中国大陆版许可证授权。
评论
Comment from 洪川
Time 2010年12月19日 at 4:33 上午
另一个解决方案是使用syslog,考虑到性能,最好使用syslog-ng或者rsyslog。
使用syslog将日志转发到一集中的一台日志服务器,再进行处理。这样几乎不需要怎么开发代码,使用现成的开源应用就可以解决。我们使用syslog-ng收集上千台服务器的系统log(不包含应用log),流量、负载,都很低。
Comment from H.E.
Time 2010年12月19日 at 6:54 下午
但是如果是纯文本的信息 需要查询的时候将会加大成本,更不要说对日志数据进行分析和挖掘了,如果使用Hadoop/Hive/MapReduce固然是不错,有点大材小用,而且增加成本。本文提到的只是针对某种场景和折中方案,而且我在另外一篇文章中也提到过几种集中式日志的方案。
如: http://www.javabloger.com/article/j2ee-cluster-log-monitoring.html
Comment from 邓桥
Time 2012年04月21日 at 10:41 上午
谢谢,正是我需要的






Comment from nickevin
Time 2010年05月24日 at 4:08 下午
希望能够楼主继续跟进此项目的发展 长期关注中…