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

K E*_*son 5 java logging distributed log4j java.util.logging

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

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

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

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

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

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

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

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

我想问社群以下问题.

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

非常感谢.

更新

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

Nee*_*aks 3

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

一旦您在 LogBack 中拥有日志,您就可以使用它的众多附加程序之一来聚合多台计算机上的日志,有关详细信息,请参阅有关附加程序的手册部分。Socket、JMS 和 SMTP 似乎是最明显的候选者。

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

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

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