管理分布在许多机器上的大量日志文件

6
我们开始使用第三方平台(GigaSpaces)来帮助我们进行分布式计算。我们现在试图解决的一个主要问题是如何在这个分布式环境中管理我们的日志文件。我们目前的设置如下:
我们的平台分布在8台机器上。在每台机器上,我们有12-15个进程使用java.util.logging记录到单独的日志文件中。在此平台之上,我们有自己的应用程序,使用log4j并记录到单独的文件中。我们还将stdout重定向到单独的文件中以捕获线程转储和类似内容。
这导致大约有200个不同的日志文件。
目前我们没有任何工具来协助管理这些文件。在以下情况下,这给我们带来了严重的头疼:
1. 当我们事先不知道出现问题的进程时进行故障排除。在这种情况下,我们当前使用ssh登录每台机器并开始使用grep。
2. 试图通过定期检查日志来预防性地查找异常情况。在这种情况下,我们也会当前登录所有机器,并使用less和tail查看不同的日志。
3. 设置警报。我们正在寻求在超过阈值的事件上设置警报。这看起来很麻烦,因为要检查200个日志文件。
今天我们每秒只有大约5个日志事件,但随着我们将越来越多的代码迁移到新平台上,这个数字将增加。
我想问问社区以下问题:
1. 您如何处理分布在几台机器上、通过不同框架记录的许多日志文件的类似情况?
2. 为什么选择了那种特定的解决方案?
3. 您的解决方案如何运作?您发现了什么好处和坏处?
非常感谢。
更新
我们最终评估了Splunk的试用版。我们对它的工作方式非常满意,并决定购买它。易于设置,快速搜索,以及针对技术倾向的许多功能。我可以建议任何处于类似情况的人去尝试一下。
5个回答

3
我建议将所有Java日志导入Simple Logging Facade for Java(SLF4J),然后将SLF4J的所有日志重定向到LogBack。 SLF4J专门支持处理所有常用的遗留API(log4j,commons-logging,java.util.logging等),请参见此处
一旦将日志记录在LogBack中,您可以使用它的许多附加程序之一来聚合来自多台计算机的日志,有关详细信息,请参见手册有关附加器的部分。Socket、JMS和SMTP似乎是最明显的候选项。
LogBack还具有内置支持,可监视日志文件中的特殊条件并过滤事件发送到特定的appender。因此,您可以设置SMTP appender,每次日志中存在ERROR级别事件时都会向您发送电子邮件。
最后,为了简化故障排除,请确保向所有传入的“请求”添加某种请求ID,有关详细信息,请参见我的答案此问题 编辑: 您还可以实现自己的自定义LogBack appender并将所有日志重定向到Scribe

值得指出的是,将所有内容重定向到 Scribe 可能会在系统中创建单点故障,例如当 Scribe 守护进程宕机时。 - Eugene Kuleshov
最终解决方案的容错能力通常与部署特定相关,因此留给负责最终解决方案架构的设计师来处理。不过,这是需要记在心中的事情。 - Neeme Praks
1
我想补充一点,从实质上讲,这并不是真正的“单点故障”,如果Scribe中央节点宕机,整个解决方案不会受到影响 - 单个Scribe节点只是在本地排队记录日志,直到中央节点再次启动。 Scribe停机只会影响日志记录子系统的可用性。 - Neeme Praks

2

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


1
我建议您查看类似SplunkScribe的日志聚合工具。
(此外,我认为这更像是一个ServerFault问题,因为它涉及到应用程序和数据的管理,而不是创建应用程序。)

谢谢您的建议。您对这些工具有什么经验?确实,ServerFault可能更好,我同意。 - K Erlandsson
1
我曾使用Splunk监视大约40台服务器的日志,效果非常好。唯一的缺点是前端有些沉重(JavaScript魔法使Ubuntu上的Firefox崩溃),但很可能自那时以来已经得到改进。 - bwawok
就个人而言,我还没有涉及让 Splunk 自动捕获日志数据,只是手动将数据导入其中——但它的前端和分析工具看起来非常棒。 - matt b

1
我能给你的唯一建议就是确保在代码中传递事务ID,并在记录日志时记录它,以便稍后将不同的调用关联起来。

0

我会将文件传输到一台集中式机器上,然后在其上运行分析机制。也许你可以使用 Hadoop 集群来完成这个任务,并运行 map/reduce 作业来进行分析...每 5 分钟将其复制到 Hadoop 集群等。我不确定这是否符合你的需求。在这种情况下,看看已经提到的 Scribe 可能是一个好主意。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接