我们已经开始使用第三方平台(GigaSpaces)来帮助我们进行分布式计算.我们现在要解决的一个主要问题是如何在这个分布式环境中管理我们的日志文件.我们目前有以下设置.
我们的平台分布在8台机器上.在每台机器上,我们有12-15个进程,使用java.util.logging记录分离日志文件.在这个平台上,我们有自己的应用程序,使用log4j和日志来分隔文件.我们还将stdout重定向到一个单独的文件以捕获线程转储等.
这导致大约200个不同的日志文件.
截至目前,我们没有工具来协助管理这些文件.在下列情况下,这会给我们带来严重的麻烦.
>我们事先没有知道问题发生在哪个过程中的故障排除.在这种情况下,我们当前使用ssh登录每台机器并开始使用grep.
>通过定期检查日志以寻找任何不寻常的东西,试图积极主动.在这种情况下,我们当前还登录到所有计算机并使用less和tail查看不同的日志.
>设置警报.我们希望在超过阈值的事件上设置警报.这看起来很痛苦,需要检查200个日志文件.
今天我们每秒只有大约5个日志事件,但随着我们将越来越多的代码迁移到新平台,这将会增加.
我想问社群以下问题.
>您如何使用分布在通过不同框架记录的多台计算机上的许多日志文件来处理类似情况?
>为什么选择那个特定的解决方案?
>您的解决方案是如何运作的?你觉得什么好,你发现什么不好?
非常感谢.
更新
我们最终评估了Splunk的试用版.我们对它的工作方式非常满意并决定购买它.易于设置,快速搜索和技术倾向的大量功能.我可以推荐任何类似情况的人来检查一下.
解决方法:
我建议将所有java日志管道传输到Simple Logging Facade for Java(SLF4J),然后将所有日志从SLF4J重定向到LogBack. SLF4J特别支持处理所有流行的遗留API(log4j,commons-logging,java.util.logging等),见here.
一旦你在LogBack中登录了日志,就可以使用它的多个appender来聚合多台机器上的日志,详细信息请参见手册section about appenders.套接字,JMS和SMTP似乎是最明显的候选者.
LogBack还内置支持监视日志文件中的特殊条件并过滤发送到特定appender的事件.因此,您可以设置SMTP appender,以便每次日志中出现ERROR级别事件时向您发送电子邮件.
最后,为了简化故障排除,请确保为所有传入的“请求”添加某种requestID,有关详细信息,请参阅我对this question的回答.
编辑:您还可以实现自己的自定义LogBack appender并将所有日志重定向到Scribe.