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

时间:2012-08-14 14:57:38

标签: logging nosql

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

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

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

3 个答案:

答案 0 :(得分:5)

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

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

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

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

他们缓冲日志,异步将数据写入其他系统,如MongoDB / PostgreSQL等。写入由批次完成,因此效率更高而不是直接从应用程序写此链接描述了如何将日志从PHP程序放入Fluentd。

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

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

答案 1 :(得分:1)

迟到的回复,但这个案例非常适合:

  

Logstash:Logstash的服务器组件,用于处理传入的日志

     

Elasticsearch:存储所有日志

     

Kibana:用于搜索和可视化日志的Web界面

您可以使用Logstash Forwarder将日志发送到Logstash。它充当日志转发代理。您可以查看各种格式,数据库和消息存储的日志文件,并将它们提升到Elasticsearch DB。 之后,您使用Kibana web ui观看所有内容。为此,不要使用SQL / NoSQL数据库构建自定义解决方案。

  

Splunk是另一种类似的商业解决方案   架构。

如果需要超实时性能,请查看基于Kafka的解决方案。

更多信息: https://www.digitalocean.com/community/tutorials/how-to-use-logstash-and-kibana-to-centralize-and-visualize-logs-on-ubuntu-14-04

https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying

答案 2 :(得分:0)

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

检查出来:www.couchbase.com