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

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

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

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

截至目前,我们没有工具来协助管理这些文件。 在下列情况下,这会让我们头疼。

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

  • 通过定期检查日志以寻找任何不寻常的东西,试图主动。 在这种情况下,我们当前还登录到所有计算机并使用lesstail查看不同的日志。

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

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

我想问社群以下问题。

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

非常感谢。

更新

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

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

将日志放入LogBack后,您可以使用其中一个堆栈来聚合多台计算机上的日志,有关详细信息,请参阅有关appender的手册部分 。 Socket,JMS和SMTP似乎是最明显的候选者。

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

最后,为了简化故障排除 ,请务必为所有传入的“请求”添加某种requestID ,有关详细信息,请参阅此问题的答案。

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

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

我建议看一下像Splunk或Scribe这样的日志聚合工具。

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

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

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