2

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

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

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

4

3 回答 3

6

我见过很多公司都在使用MongoDB来存储应用程序日志。它的模式自由性对于应用程序日志非常灵活,在这种情况下,模式往往会不时改变。此外,它的Capped Collection功能非常有用,因为它会自动清除旧数据以保持数据适合内存。

人们通过普通的 Grouping 或 MapReduce 聚合日志,但速度不是那么快。尤其是 MongoDB 的 MapReduce 只能在单线程中工作,而且它的 JavaScript 执行开销很大。新的聚合框架可以解决这个问题。

当您使用 MongoDB 进行日志记录时,需要注意的是高写入吞吐量导致的锁争用。虽然 MongoDB 的插入默认是即发即弃的风格,但调用大量的 insert() 会导致严重的写锁争用。这可能会影响应用程序性能,并阻止阅读器聚合/过滤存储的日志。

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

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

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

MongoDB 的问题是当数据量超过内存大小时它开始变慢。此时,您可以切换到其他解决方案,如Apache HadoopCassandra。如果你有上面提到的分布式日志层,你可以随着你的成长切换到另一个解决方案。本教程介绍如何使用 Fluentd 将日志存储到 HDFS。

于 2012-11-17T06:21:08.673 回答
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

于 2017-01-18T20:54:56.857 回答
0

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

看看:www.couchbase.com

于 2012-08-14T20:02:36.857 回答