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