15

在工作中,我们正在构建一个分布式应用程序(可能跨 LAN 上的多台机器,之后可能跨多个大洲使用 WAN+VPN)。我们不希望每台机器本地的日志文件(填满其磁盘并且无法汇总查看),因此我们需要通过网络集中日志记录。大多数日志都不重要,所以 UDP 对他们来说很好,但有些是赔钱的重要警报,必须可靠地传递,这意味着 TCP。如果日志记录协议过于繁琐,我们会担心网络拥塞,或者如果应用程序没有响应,我们会担心将其拖入爬行状态。

我考虑过的一些可能性是:

  • syslog(看起来很完美,但我的老板对此有敌意,所以我可能无法选择它)。
  • 来自 facebook 的抄写员(但每台机器上都有服务器似乎有点重量级 - 并非每条日志消息都需要超可靠性)。
  • 使用像rabbitmq这样的消息队列,它可以将多个队列调整为不同级别的事务安全。
  • 最坏的情况,我可以从头开始编写自己的。

您还有其他建议吗?您使用了哪些集中式日志记录解决方案,它们的效果如何?

编辑:我倾向于抄写员,因为它的存储转发设计将正在运行的应用程序与网络延迟分离。但是在努力安装它之后,我发现(1)它不能作为二进制包提供 - 现在这是不可原谅的 - 并且(2)它密切依赖于一个也不能作为二进制包提供的库(thrift)!最糟糕的是,它甚至无法正确编译。这不是发布质量代码,即使在开源中也是如此。

4

6 回答 6

12

我们已经成功地将ZeroMQ用于像您这样的分布式应用程序场景的日志。它非常可靠且速度极快。在使用Spread实施不太成功后,我们转向了 ZeroMQ 。在我们的设置中,单个 ZeroMQ 服务器能够处理 70 多种不同的日志,从中到高繁忙的分布式应用程序。它从 LAN 和 Internet 接收数据。

如果您需要详细的队列服务器比较,请查看 Second Life wiki 中的此页面

希望能帮助到你!

于 2009-11-27T16:38:48.140 回答
6

最近有几种选择。值得注意的是,Scribe 不再维护。Facebook 开发了它的继任者 Caligraphus,它不是开源的。这是替代方案列表。

  • syslog:安装在所有 Linux 发行版上
  • Fluentd : 基于 C+Ruby 的轻量级记录器,将日志处理为 JSON 流
  • Flume:在 Cloudera 开发,用 Java 编写,与 Hadoop 生态系统配合得很好
  • Apache Kafka:在 LinkedIn 开发,基于拉取的架构
  • Scribe:由 Facebook 开源,但不再维护

免责声明:我是 Fluentd 项目的提交者。

于 2012-11-17T03:49:00.553 回答
5

其他示例可能很棒,但我对Syslog-NG很幸运。它非常灵活且可配置;虽然很容易拿起它并快速做一些有用的事情。

于 2009-11-29T16:31:34.200 回答
5

如果您打算只关注基础设施日志(例如系统级别),那么 Syslog 是很好的选择。听说KIWI Syslog Server不错,但自己没试过。另一方面,如果您想记录与应用程序相关的内容,系统日志可能不是最好的选择。如果您使用 apache 日志服务(log4j、log4xxx 等),那么logFaces将是一个很好的解决方案,因为它专门用于在一个地方聚合多个应用程序。适用于 TCP 或 UDP 连接,并具有不错的日志查看器和数据库集成。

披露:我是该产品的作者。

于 2009-12-01T15:34:15.920 回答
1

您也可以考虑使用 SNMP 警报。

于 2009-11-27T15:40:33.597 回答
1

审查了此线程中推荐的所有替代方案。寻找python驱动的东西。谷歌搜索更多,发现哨兵https://getsentry.com/welcome/开源,有据可查。对于商业来说应该是可靠的,因为有一个基于此的业务。

于 2013-09-29T10:32:58.570 回答