从文件记录迁移到数据库记录

Bra*_*den 2 logging nosql

我们目前正在考虑从日志记录迁移到文件,再到记录到NoSQL数据库.我们公司的另一个团队开始使用HBase,但对于我们想做的事情来说,这看起来非常复杂.我一直在看MongoDB,但我想要一些建议.

目前,我们在农场中有数百台服务器用于不同的应用.每当我们从其中一个应用程序中听到问题时,就会有一个很长的过程从app ops中检索日志,然后是一个漫长的过程来筛选它们以找到问题.我们正在考虑将所有日志记录移动到一个中心位置并围绕它构建Web UI,以便我们可以更轻松地访问和查询日志.

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

Kaz*_*hta 5

我见过很多公司都在使用MongoDB来存储应用程序日志.它的模式免费对于应用程序日志非常灵活,而模式往往会随时更改.此外,它的上限集合功能非常有用,因为它会自动清除旧数据以使数据适合内存.

人们通过普通的分组或MapReduce聚合日志,但速度并不快.特别是MongoDB的MapReduce仅在单个线程中工作,其JavaScript执行开销很大.新的聚合框架可以解决这个问题.

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

一种解决方案可能是使用日志收集器框架,如Fluentd,LogstashFlume.这些守护进程应该在每个应用程序节点上启动,并从应用程序进程获取日志.

它们缓冲日志并异步地将数据写入其他系统,如MongoDB/PostgreSQL /等.编写是通过批处理完成的,因此它比直接从应用程序编写更有效.此链接描述如何将日志从PHP程序放入Fluentd.

这里有一些关于MongoDB + Fluentd的教程.

MongoDB的问题是,当数据量超过内存大小时,它开始减速.此时,您可以切换到Apache HadoopCassandra等其他解决方案.如果您有上面提到的分布式日志记录层,则可以在增长时切换到另一个解决方案.本教程介绍如何使用Fluentd将日志存储到HDFS.