gpt4 book ai didi

perl - MongoDB 日志记录

转载 作者:可可西里 更新时间:2023-11-01 09:11:49 24 4
gpt4 key购买 nike

我正在构建一个日志系统,该系统将记录对分布在多个应用程序节点上的 Web 服务的请求和响应。我正在考虑使用 MongoDB 作为存储库并实时登录,或者更实际地在 x 次请求后将日志转储到数据库。该应用程序被设计成相当大的容量,并且是用 Perl 构建的。有没有人有这样做的经验?建议?或者这是一个禁忌?

最佳答案

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

人们通过正常分组或 MapReduce 聚合日志,但它并没有那么快。特别是MongoDB的MapReduce只在单线程内工作,JavaScript执行开销巨大。 New aggregation framework可以解决这个问题。

另一个问题是高写入吞吐量。虽然 MongoDB 的 insert 默认是 fire-and-forget 样式,但是调用大量的 insert 命令会导致严重的写锁争用。这可能会影响应用程序性能,并阻止读者聚合/过滤存储的日志。

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

fluentd plus mongodb

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

关于perl - MongoDB 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8884701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com