5

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

我们的平台分布在 8 台机器上。在每台机器上,我们有 12-15 个进程使用 java.util.logging 记录到单独的日志文件中。在这个平台之上,我们有自己的应用程序,它们使用 log4j 并记录到单独的文件。我们还将标准输出重定向到一个单独的文件以捕获线程转储和类似情况。

这会产生大约 200 个不同的日志文件。

到目前为止,我们还没有工具可以帮助管理这些文件。在以下情况下,这会让我们非常头疼。

  • 当我们事先不知道问题发生在哪个进程时进行故障排除。在这种情况下,我们当前使用 ssh 登录到每台机器并开始使用grep.

  • 尝试通过定期检查日志是否有任何异常来积极主动。less在这种情况下,我们目前还登录到所有机器并使用和查看不同的日志tail

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

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

我想向社区提出以下问题。

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

非常感谢。

更新

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

4

5 回答 5

3

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

在 LogBack 中获取日志后,您可以使用其中一个附加器来聚合多台机器上的日志,有关详细信息,请参阅有关附加器的手册部分。Socket、JMS 和 SMTP 似乎是最明显的候选者。

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

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

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

于 2010-10-25T13:40:31.740 回答
2

一个值得探索的有趣选项是在这些节点上运行Hadoop 集群并编写自定义Map Reduce作业来搜索和聚合特定于您的应用程序的结果。

于 2010-10-25T13:51:07.400 回答
1

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

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

于 2010-10-25T13:13:32.500 回答
0

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

于 2010-10-25T13:36:18.747 回答
0

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

于 2010-10-25T13:55:15.160 回答