集中式网络日志 - 系统日志和备选方案?

时间:2009-11-27 15:11:55

标签: logging networking message-queue syslog

在工作中,我们正在构建一个分布式应用程序(可能跨越局域网上的多台计算机,可能稍后在WAN + VPN上跨越几个大陆)。我们不希望每台机器都有本地日志文件(填满磁盘而无法集中查看),因此我们需要集中通过网络进行日志记录。大多数日志都不重要,因此UDP对他们来说很好,但有些是丢失重要的警报,必须可靠地传递,这意味着TCP。如果日志记录协议过于繁琐,我们担心会造成网络拥塞,或者如果应用程序没有响应,我们会将应用程序拖到抓取状态。

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

  • 系统日志(看起来很完美,但是我的老板对此反对,所以我可能无法选择它。)
  • 来自facebook的
  • scribe (但每台机器上的服务器似乎都有点重量级 - 并非每条日志消息都需要超级可靠性。)
  • 使用像 rabbitmq 这样的消息队列,可以将多个队列调整到不同的交易安全级别。
  • 最糟糕的情况,我可以从零开始写自己的。

你还有其他建议吗?您使用了哪些集中式日志记录解决方案,以及它们的运行情况如何?

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

6 个答案:

答案 0 :(得分:10)

我们已成功使用ZeroMQ作为您自己的分布式应用程序方案的日志。它非常可靠,速度极快。在使用Spread进行不太成功的实施后,我们搬到了ZeroMQ。在我们的设置中,单个ZeroMQ服务器能够处理来自中高繁忙分布式应用程序的70多种不同日志。它从LAN和互联网接收数据。

如果您需要详细的队列服务器比较,look at this page from the Second Life wiki

希望它有所帮助!

答案 1 :(得分:5)

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

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

答案 2 :(得分:5)

最近有几种选择。值得注意的是,Scribe不再维护。 Facebook开发了名为Caligraphus的继任者,它不是开源的。这是一个替代品清单。

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

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

答案 3 :(得分:4)

其他例子可能很棒,但我对Syslog-NG祝你好运。它非常灵活和可配置;虽然很容易找到并快速做一些有用的事情。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

审核了此主题中推荐的所有替代方案。寻找蟒蛇动力的东西。用Google搜索更多信息并找到哨兵https://getsentry.com/welcome/开源,有据可查。对于商业应该是可靠的,因为有一个基于此的业务。