搜索巨大的日志文件

故障排除,分析和过滤日志文件是迄今为止最辛苦的日常工作之一。我的问题是搜索日志文件,其大小可能超过4个演出。只需加载文件最多需要15分钟。我正在运行一个相当快的处理器,有8个内存。文件加载后,我实际上只有grep和/或control + F的奢侈品来扫描文件。当我试图从多个系统中查看文件时,这会变得更糟。尝试根据时间戳分隔文件,使它们变小,但真的没有快乐。 是否有一个工具甚至一个过程可以用来减少故障排除(除了通常的“只是先修复bug”)? 您的意见表示赞赏。     
已邀请:
你装的是什么? 4演出是一个相当大的文件,但这不应该花费很长时间加载到内存中。 对于大的文件,我建议直接使用grep,如果grep没有为你做,SED和AWK是你的朋友。如果您想实时进行,请了解如何将这些工具与管道和
tail -f
结合使用。 是的,我知道,SED起初非常令人生畏。它也是非常强大的。学习它。 如果你在窗户上,你会得到我的同情。我可以推荐一个unix shell吗? 如果您害怕命令行工具,请考虑学习Perl或Python。他们都很擅长在像这样的大文件中从噪声中分类信号。     
Baretail是一个很好的工具。试试看。我没有用它4个演出文件,但我的日志文件也很大,它工作得很好。 http://www.baremetalsoft.com/baretail/index.php 编辑:我没有看到有人已经建议裸。     
如果你想排除你不想看的东西,你可以
grep -v 'I dont wanna see this' > logWithExcludedLines.log
。你也可以使用正则表达式
grep -vE 'asdf|fdsa' > logWithNoASDForFDSA.log
这种方法适用于apache访问日志
grep -v 'HTTP/1.1 200' > no200s.log
(或类似的东西,不记得确切的字符串)。     
我目前正在使用unix命令行工具(f)grep,awk,cut,join等来做这些事情,这些工具也适用于带有cygwin或UnxUtils等的窗口,并且还使用一些Scala脚本来处理更多的东西复杂。您可以编写脚本来执行跨多个文件中的日志文件条目的搜索。但我也想知道是否有更好的东西 - 可能将它们导入数据库(两者都是SO问题)? 顺便说一下:用SSD驱动器替换你的硬盘。这些更快!另外,将磁盘gzip压缩的日志保留在磁盘上是值得的,因为在搜索磁盘时,磁盘是瓶颈。如果您在日志文件中搜索正则表达式并希望每次出现有100行上下文,您可以:
zcat *.log.gz | grep -100 '{regexp}' > {outputfile}
并将outputfile加载到您喜欢的文本文件查看器中。如果您正在搜索固定字符串,请使用
fgrep
(与
grep
相同,附加选项
-F
) - 这要快得多。     

要回复问题请先登录注册