2011-03-21 65 views
2

我正在使用MongoDB和Ruby(sinatra)应用程序。目前,所有日志记录都完成到本地文件。我宁愿将日志消息放入MongoDB集合中。做这个的最好方式是什么?登录到MongoDB集合(Ruby)

回答

1

有,不只是这一个开源项目:从文件

https://github.com/customink/central_logger

+0

文档似乎暗示这是Rails的宝石,正如我在我的问题说,我没有使用Rails。你有没有在非Rails环境中使用它?如果是的话,多少黑客参与到它的工作? – 2011-03-22 01:49:02

1
  1. 加载数据。
  2. 将日志插入到mongodb集合中(here详细的ruby驱动程序tutolrial)。
  3. 在记录数据而不是在文件中写入的方法只是在mongodb集合中插入日志。

另外capped collections很适合记录等任务。

+0

没问题。我需要知道如何在不重写所有记录行的情况下执行第3步? – 2011-03-22 22:00:20

1

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

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

Fluentd plus MongoDB

他们缓冲日志和异步写入数据至其他系统,如MongoDB的/ PostgreSQL的/等写入分批进行,所以这是一个很大比直接从应用程序编写效率更高。该链接描述了如何将日志从Ruby程序放入Fluentd中。