grep apache日志

大家好,我有点新grep等。我没有阅读手册页,search互联网之前问这里的问题。我有一个服务器后面运行的反向代理服务器链。一个应用程序给我的问题,我有分析头响应所有这些服务器都可以在SSH控制台访问,所以我决定读取Apache日志我的问题是我想有一个脚本,可以从Apache读取所需的日志部分,告诉我确切的事情。我必须这样做在很多地方工作变得困难。 这里是我有一个样本日志

192.168.1.1 - - [18/Nov/2010:15:24:53 +0530] "GET /appl/pix/i/restore.gif HTTP/1.1" 304 187 "http://somedomain/appl/course/view.php?id=2" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; InfoPath.2)" 192.168.1.1 - - [18/Nov/2010:15:24:53 +0530] "GET /appl/pix/i/group.gif HTTP/1.1" 304 187 "http://somedomain/appl/course/view.php?id=2" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; InfoPath.2)" 192.168.1.1 - - [18/Nov/2010:15:24:53 +0530] "GET /appl/pix/i/return.gif HTTP/1.1" 304 188 "http://somedomain/appl/course/view.php?id=2" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; InfoPath.2)" 192.168.1.1 - - [18/Nov/2010:15:24:53 +0530] "GET /appl/pix/i/stats.gif HTTP/1.1" 304 187 "http://somedomain/appl/course/view.php?id=2" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; InfoPath.2)" 192.168.1.1 - - [18/Nov/2010:15:24:53 +0530] "GET /appl/pix/i/questions.gif HTTP/1.1" 304 187 "http://somedomain/appl/course/view.php?id=2" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; InfoPath.2)" 192.168.1.1 - - [18/Nov/2010:15:24:53 +0530] "GET /appl/pix/i/files.gif HTTP/1.1" 304 187 "http://somedomain/appl/course/view.php?id=2" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; InfoPath.2)" 192.168.1.1 - - [18/Nov/2010:15:24:53 +0530] "GET /appl/pix/i/user.gif HTTP/1.1" 304 187 "http://somedomain/appl/course/view.php?id=2" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; InfoPath.2)" 192.168.1.1 - - [18/Nov/2010:15:24:53 +0530] "GET /appl/pix/i/course.gif HTTP/1.1" 304 187 "http://somedomain/appl/course/view.php?id=2" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; InfoPath.2)" 192.168.1.1 - - [18/Nov/2010:15:24:53 +0530] "GET /appl/pix/t/groupn.gif HTTP/1.1" 304 187 "http://somedomain/appl/course/view.php?id=2" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; InfoPath.2)" 

我想在日志的基础上有一些东西可以login相关的行:那么我怎么在这个情况下做一个grep呢有没有什么简单的build议,日志文件很大,我需要得到只有那些基于时间戳(可以是用户范围)的响应给出了错误。

除了学习如何使用软件工具之外,我还build议您学习标点句子。

我只需要得到那些基于时间戳(可以是用户范围)的响应,这些响应给出了错误

但是,你提供的日志样本不包含HTTP状态代码 – 这是从错误日志? 如果没有,那么你需要改变你的日志格式,以更多的信息。

'grep'在不同的实现中有所不同(你不会说你在运行这个操作系统),但是它几乎没有提供一个有限状态机的实现 – 如果你不能把时间范围表示为一个正则expression式(Arenstar的解决scheme是如何工作的)。

如果是我,我会使用awk – 如下所示:

 cat logfiles | awk 'BEGIN { output=0; } /\[18\/Nov\/2010:15/ { output=1; } /\[19\/Nov\/2010:02/ { output=0; exit 0; # ... if no further blocks to be extracted } { if (output) print $0; }' 

这将在18日下午3点到19日凌晨2点之间返回所有日志条目。

后面的反向代理服务器链

恩,真的?

 cat apachelog | grep '[18/Nov/2010:15:24' 

应该这样做..只要改变date/时间就可以了

看我写的Python脚本 。 我打印日志条目的时间范围。 由于它是为syslog日志文件编写的,因此需要适应Apache日志。