2012-08-14 182 views
2

我们正在考虑从日志记录到文件记录到NoSQL数据库。我们公司的另一个团队开始使用HBase,但对于我们想要做的事来说,这看起来相当复杂。我一直在看MongoDB,但我想提出一些建议。从文件日志记录移动到数据库日志记录

目前我们在农场有数百台服务器用于不同的应用。每当我们从某个应用程序中听到问题时,就有一个漫长的过程从应用程序操作系统中检索日志,然后通过一个漫长的过程筛选出所有问题。我们正在考虑将所有日志记录移到一个中心位置,并围绕它建立一个Web UI,以便我们可以更轻松地访问和查询日志。

哪个NoSQL数据库非常适合存储和查询应用程序日志?

回答

5

我见过很多公司都在使用MongoDB的存储应用程序日志。它的无模式对于应用程序日志非常灵活,在这种日志中架构往往会随时间变化。另外,它的Capped Collection功能非常有用,因为它会自动清除旧数据以保持数据适合内存。

人们通过普通的分组或MapReduce聚合日志,但速度并不快。特别是MongoDB的MapReduce只能在一个线程内工作,并且其JavaScript执行开销很大。 New aggregation framework可以解决这个问题。

当您使用MongoDB进行日志记录时,关注的是锁定争用的高写入吞吐量。尽管默认情况下MongoDB的插入是默认情况下的fire-and-forget样式,调用大量insert()会导致严重的写入锁争用。这可能会影响应用程序性能,并阻止读者聚合/筛选存储的日志。

的一个解决方案可能使用的日志收集器框架FluentdLogstash,或Flume。这些守护进程应该在每个应用程序节点上启动,并从应用程序进程获取日志。

他们缓冲日志和异步写出来的数据到其他系统,如MongoDB的/ PostgreSQL的/等写入由批次完成的,所以这是一个很大比直接从应用程序编写效率更高。该链接描述了如何将日志从PHP程序放入Fluentd中。

下面是关于MongoDB的+ Fluentd一些教程。

MongoDB的问题是,当数据量超过了内存大小也开始放缓。此时,您可以切换到其他解决方案,如Apache HadoopCassandra。如果您有上述的分布式日志记录层,则可以随着您的增长切换到另一种解决方案。本教程介绍如何使用Fluentd将日志存储到HDFS。

0

Couchbase 2.0(目前在开发人员预览版中,但即将成为Beta版)为此提供了高性能选项。在记录的情况下,您将需要非常快的写入速度,并且视图和查看查询将为读取/搜索/查询提供灵活性。 Couchbase 2.0也将通过Elastic Search集成进行全文搜索。

检查出来:www.couchbase.com