最小的开销分布式事件记录库/框架?

时间:2009-06-20 17:20:34

标签: logging

我们希望记录我们系统中的所有重大事件。例如,在数据库可能存储当前用户状态的情况下,事件日志应记录对该状态的所有更改以及更改发生的时间。

事件日志记录工具应尽可能接近零开销,应该容纳结构化信息(而不是文本日志消息),并应支持分布式部署(许多框抛出许多事件)。

在过去的生活中,我们有一个基于UDP的系统运行良好,因为我们可以很好地控制系统(最小化数据包丢失)。偶数投掷者将触发将被捕获并记录在其他盒子上的UDP数据包。我正在寻找类似的,希望开源的,现成的,并可在更一般的网络中部署。或者,我愿意接受有关如何构建此类内容的建议。

这应该适用于多种语言,但主要针对Java和Python。参与(投掷事件)申请会有所不同;有些将是网络应用程序,其他将是面向批量的应用结果可能会存在于Hadoop / HDFS / HBase中。

3 个答案:

答案 0 :(得分:3)

如果你想沿着UDP路线走下去(你似乎对此感到满意),并且Java是一个选项,那么请通过Log4j查看Log4j UDPAppender及其对UDP传输的支持。

LoggingEvent会将java.lang.Object作为消息,因此它非常通用,您可以将所需的任何数据放入其中。如果您正在穿越网络,它应该(很可能)是可序列化的,并且假设您需要UDP,则应该具有相应的大小 - 64k或更小,然后依赖于传输层)。您只需截取服务器端的LoggingEvent,然后根据需要进行处理。

请注意,UDP appender是Log4j的伴侣组件,您必须自己构建它。但那是微不足道的。

答案 1 :(得分:2)

您可以考虑使用旧的* nix Syslog。它具有非常小的开销,主要用于UDP或本地UNIX套接字,但如果需要可靠的日志记录,则可以使用TCP。适用于我(Python / Perl,主要是完全语言/平台无关),就像魅力一样。

对不起,我不熟悉Java,但功能方面,这似乎是一个很好的库我已经去了:http://syslog4j.org/

修改:快速谷歌搜索发现了一篇名为“Robust event logging with Syslog”的文章,该文章似乎非常详细。对不起,我在发布时误读了它,并认为它是一个* nix syslog库,但事实并非如此。

答案 2 :(得分:0)

这听起来像是一个潜在的消息候选人(火与忘记)。我主要是一个.NET用户,所以不知道Java有哪些日志框架。但是我快速查看是否有任何针对log4j的消息传递程序(我经常使用log4net) - IBM有一篇关于a WebSphere MQ JMS appender的文章,这可能对你有帮助。

因此,不要把我的答案视为提倡使用WebSphere MQ--请考虑建议考虑消息传递 - 那里有许多开源消息传递框架 - RabbitMQ只是一个例子。