2010-10-28 62 views
8

排除故障,分析&过滤日志文件是迄今为止最费力的日常工作之一。我的问题是通过一个日志文件进行搜索,该文件的大小可能超过4个演出。只需加载文件需要15分钟。我正在运行一个速度相当快的处理器,并拥有8个内存。加载文件后,我实际上只有grep和/或控制+ F的豪华扫描整个文件。当我试图查看来自多个系统的文件时,这会变得更糟。试图根据时间戳来分离文件,使它们变小,但实际上并没有快乐。搜索大量日志文件

是否有一个工具,甚至是一个过程,我可以用它来使故障排除更省时(除了通常的“只是修复错误”)?

您的意见非常感谢。

+2

看看这里http://www.baremetalsoft.com/index.php – 2010-10-28 02:50:10

+0

你在哪个平台上运行? – BobbyShaftoe 2010-10-28 03:03:12

+1

为什么日志如此之大:是因为真的有很多事务/事件发生,或者是被记录的不必要的细节级别?应用程序是否有任何支持来调整详细程度,和/或将来自不同组件的日志数据指向不同的日志文件? – 2010-10-28 03:17:17

回答

9

你在装什么? 4演出是一个相当大的文件,但不应该花很长时间才能加载到内存中。

对于文件很大的情况,我建议直接使用grep,如果grep没有为你做,SED和AWK是你的朋友。如果您想实时进行此操作,请了解如何将这些工具与管道配合使用并tail -f

是的,我知道,SED起初很吓人。它也是非常强大的。学习它。

如果你在windows上,你有我的同情心。我可以推荐一个unix shell吗?

如果您害怕命令行工具,请考虑学习Perl或Python。他们在这样的大文件中都很擅长从噪音中分类信号。

+1

我会那么做。请学习AWK和SED。那么你可以写几个脚本,生活将会非常简单! :-) – zerodin 2010-10-28 02:59:06

+0

对不起队友!错过了。 upvote它是为你! – zerodin 2010-10-28 03:08:10

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(或类似的东西,不记得确切的字符串)。

0

我目前做使用UNIX命令行工具(F)的grep,awk的,剪切,加入等这样的事情,这可也与cygwinUnxUtils等窗口,并且还使用一些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} 

和OUTPUTFILE加载到你喜欢的文本文件查看器。如果您正在搜索固定字符串,请使用fgrep(与grep相同,附加选项-F) - 这会更快。