ikr*_*ain 46 .net logging mongodb
您是否有任何使用NoSQL数据库登录可扩展应用程序的经验?我已经对NoSQL数据库做了一些关于日志记录的研究,发现MongoDB似乎是一个不错的选择.另外,我发现log4mongo-net似乎是一个非常简单的选择.
你会推荐这种方法吗?还有其他建议吗?
yam*_*men 56
我决定修改这个被接受的答案,因为在过去的18个月中,最先进的技术已经发生了很大变化,并且存在更好的替代方案.
新答案
MongoDB是可扩展日志记录解决方案的次要选择.通常有这样的原因(例如,在负载下写入性能).我想再提出一个,它只能解决日志记录解决方案中的单个用例.
强大的日志记录解决方案至少需要涵盖以下几个阶段:
MongoDB作为一种选择只能解决存储用例(尽管有点差).分析完整的链后,就会有更合适的解决方案.
@KazukiOhta提到了一些选择.我最喜欢的端到端解决方案包括:
ElasticSearch用于日志数据存储的基础使用当前最佳的NoSQL解决方案用于日志记录和搜索用例.事实上,Logstash-Forwarder/Logstash/ElasticSearch/Kibana3属于ElasticSearch的范畴,这使得一个更具说服力的论点成为可能.
由于Logstash也可以充当Graphite代理,因此可以为收集和分析度量(而不仅仅是日志)的相关问题构建非常相似的链.
老答案
MongoDB 上限集合非常受欢迎,适合日志记录,还有"模式少"的额外好处,这通常是一种适合日志记录的语法.通常我们只知道我们想要很好地记录到项目中,或者在生产中发现某些问题之后.在这些情况下,关系数据库或严格模式往往难以改变,并且使它们"灵活"的尝试往往只是使它们"慢"且难以使用或理解.
但是,如果你想在黑暗中管理你的日志,并且让它看起来像是来自太空,那么总是使用MongoDB作为其整体基础设施的一部分的Graylog2,但提供了更多的东西,如a通用,可扩展的格式,专用的日志收集服务器,分布式架构和时髦的UI.
Kaz*_*hta 21
我见过很多公司都在使用MongoDB来存储应用程序日志.它的模式免费对于应用程序日志非常灵活,而模式往往会随时更改.此外,它的Capped Collection功能非常有用,因为它会自动清除旧数据以使数据适合内存.
人们通过普通的分组或MapReduce聚合日志,但速度并不快.特别是MongoDB的MapReduce仅在单个线程中工作,其JavaScript执行开销很大.新的聚合框架可以解决这个问题.
当您使用MongoDB进行日志记录时,关注的是高写入吞吐量的锁争用.尽管默认情况下MongoDB的插入是fire-and-forget样式,但调用大量的insert()会导致严重的写入锁争用.这可能会影响应用程序性能,并阻止读者聚合/过滤存储的日志.
一种解决方案可能是使用日志收集器框架,如Fluentd,Logstash或Flume.这些守护进程应该在每个应用程序节点上启动,并从应用程序进程获取日志.

它们缓冲日志并异步地将数据写入其他系统,如MongoDB/PostgreSQL /等.编写是通过批处理完成的,因此它比直接从应用程序编写更有效.此链接描述如何将日志从PHP程序放入Fluentd.
这里有一些关于MongoDB + Fluentd的教程.
MongoDB的问题是,当数据量超过内存大小时,它开始减速.此时,您可以切换到Apache Hadoop或Cassandra等其他解决方案.如果您有上面提到的分布式日志记录层,您可以在增长时立即切换到另一个解决方案.本教程介绍如何使用Fluentd将日志存储到HDFS.
| 归档时间: |
|
| 查看次数: |
35641 次 |
| 最近记录: |