在工作中,我们正在构建一个分布式应用程序(可能跨 LAN 上的多台机器,之后可能跨多个大洲使用 WAN+VPN)。我们不希望每台机器本地的日志文件(填满其磁盘并且无法汇总查看),因此我们需要通过网络集中日志记录。大多数日志都不重要,所以 UDP 对他们来说很好,但有些是赔钱的重要警报,必须可靠地传递,这意味着 TCP。如果日志记录协议过于繁琐,我们会担心网络拥塞,或者如果应用程序没有响应,我们会担心将其拖入爬行状态。
我考虑过的一些可能性是:
- syslog(看起来很完美,但我的老板对此有敌意,所以我可能无法选择它)。
- 来自 facebook 的抄写员(但每台机器上都有服务器似乎有点重量级 - 并非每条日志消息都需要超可靠性)。
- 使用像rabbitmq这样的消息队列,它可以将多个队列调整为不同级别的事务安全。
- 最坏的情况,我可以从头开始编写自己的。
您还有其他建议吗?您使用了哪些集中式日志记录解决方案,它们的效果如何?
编辑:我倾向于抄写员,因为它的存储转发设计将正在运行的应用程序与网络延迟分离。但是在努力安装它之后,我发现(1)它不能作为二进制包提供 - 现在这是不可原谅的 - 并且(2)它密切依赖于一个也不能作为二进制包提供的库(thrift)!最糟糕的是,它甚至无法正确编译。这不是发布质量代码,即使在开源中也是如此。