管理分布在多台计算机上的大量日志文件

时间:2010-10-25 13:05:49

标签: java logging log4j distributed java.util.logging

我们已经开始使用第三方平台(GigaSpaces)来帮助我们进行分布式计算。我们现在要解决的一个主要问题是如何在这个分布式环境中管理我们的日志文件。我们目前有以下设置。

我们的平台分布在8台机器上。在每台机器上,我们有12-15个进程,使用java.util.logging记录分离日志文件。在这个平台上,我们有自己的应用程序,使用log4j和日志来分隔文件。我们还将stdout重定向到一个单独的文件以捕获线程转储等。

这导致大约200个不同的日志文件。

截至目前,我们没有工具来协助管理这些文件。在下列情况下,这会给我们带来严重的麻烦。

  • 我们事先没有知道问题发生在哪个过程中的故障排除。在这种情况下,我们当前使用ssh登录每台计算机并开始使用grep

  • 通过定期检查日志中的任何异常情况来尝试主动。在这种情况下,我们目前还使用lesstail登录所有计算机并查看不同的日志。

  • 设置提醒。我们希望在超过阈值的事件上设置警报。这看起来很痛苦,需要检查200个日志文件。

今天我们每秒只有大约5个日志事件,但随着我们将越来越多的代码迁移到新平台,这将会增加。

我想问社群以下问题。

  • 您是如何处理类似案例的,其中许多日志文件分布在通过不同框架记录的多台计算机上?
  • 你为什么选择那个特定的解决方案?
  • 您的解决方案是如何运作的?你觉得什么好,你发现什么不好?

非常感谢。

更新

我们最终评估了Splunk的试用版。我们对它的工作方式非常满意并决定购买它。易于设置,快速搜索和技术倾向的大量功能。我可以推荐任何处于类似情况的人来检查一下。

5 个答案:

答案 0 :(得分:3)

我建议将所有java日志记录管道传输到Simple Logging Facade for Java(SLF4J),然后将所有日志从SLF4J重定向到LogBack。 SLF4J特别支持处理所有流行的遗留API(log4j,commons-logging,java.util.logging等),请参阅here

在LogBack中登录日志后,您可以使用其中一个附加程序来聚合多台计算机上的日志,有关详细信息,请参阅手册section about appenders。 Socket,JMS和SMTP似乎是最明显的候选者。

LogBack还内置支持监视日志文件中的特殊条件以及发送到特定appender的过滤事件。因此,每次日志中出现ERROR级别事件时,您都可以设置SMTP appender向您发送电子邮件。

最后,为了简化疑难解答,请务必为所有传入的“请求”添加某种 requestID ,有关详细信息,请参阅我对this question的回答

编辑:您还可以实施自己的自定义LogBack appender ,并将所有日志重定向到Scribe

答案 1 :(得分:2)

一个有趣的选择是在这些节点上运行Hadoop Cluster并编写自定义Map Reduce作业,以搜索和汇总特定于您的应用程序的结果。

答案 2 :(得分:1)

我建议您查看SplunkScribe等日志汇总工具。

(另外,我认为这更像是一个ServerFault问题,因为它与管理您的应用及其数据有关,而不是创建应用程序。)

答案 3 :(得分:0)

我能给你的唯一建议是确保你通过你的代码传递一个事务ID,并确保你在记录时记录它,以便以后可以将不同的调用关联在一起。

答案 4 :(得分:0)

我会将文件传输到集中式计算机上,以便在其上运行分析器机制。可能你可以使用Hadoop集群来执行此操作并运行map / reduce作业进行分析...将它复制5分钟到haddop集群等。我不确定这是否符合您的需求。在那种关系中,如上所述,看看Scribe可能是一个好主意。