2017-04-05 63 views
0

我正在寻找修剪apache日志文件 - 目前它目前有大约3米行(因为它包括像加载的图像和视频文件,基本上任何url与但是,当直接转储到SQL服务器,并做各种查询删除这些以及删除重复我可以得到这个下降到100K行,并从那里出口到SQL Server和链接到各种其他来源。apache日志文件 - 获取数据修整和过滤

什么,我期待在试图获得是说下面:

1.2.3.4 15/04/2016:10:20:30 [test_url]/testpage 200

1.2.3.4 15/04/2016:10:25:30 [test_url]/testproduct 200

从从日志文件中的以下:

%H%吨\ “%r \” %>取值

1.2。 3.4 [15/Apr/2016:10:20:30 +0000] GET [test_url]/t estpage HTTP/1.1 200

1.2.3.4 [15 /月/ 2016:10:20:30 0000] GET [test_url]/testpage HTTP/1.1 200

1.2.3.4 [15 /月/ 2016 :10:20:30 +0000] GET [test_url] /testimage.jpg HTTP/1.1 200

1.2.3.4 [15/Apr/2016:10:25:30 +0000] GET [test_url]/testproduct HTTP /1.1 200

另外我想删除任何重复项(所以上面的第二行被删除,因为它是一个重复的,第三个已经消失了,因为它是一个.jpg) - 有没有人知道什么代码将与此合作(如果确实可行)。

如果所有的数据都被转储到SQL服务器上,但是需要修剪源数据集以帮助保留服务器空间,那么很容易做到这一点。谢谢。

回答

0

由于您似乎谈论了Apache的access_log,因此您必须在某个时刻为access_log设置CustomLog指令。

SetEnvIf Remote_Addr 10.11.12.13 dontlog 
SetEnvIf Request_URI "^/images/.*" dontlog 
SetEnvIf Request_URI "\.(mpeg|mp4|jpe?g|png|gif)" dontlog 
SetEnvIf User-Agent Robot dontlog 

等等......有创意,MYB的读:

CustomLog /var/log/apache2/access_log combined env=!dontlog 

如要排除的具体要求。然后定义很多的规则:只要在该行,例如末尾添加env=!dontlogaccording Apache docs将帮助:)

+0

谢谢,还有一件事,是否有可能在这个过程中删除部分uri字符串 - 例如[testurl] /testpage/testpage.html?promocode=test to [testurl]/testpage – user3715419

+0

如果您使用'%U'记录URI或几乎任何其他标准变量,则不会。但是你总是可以定义一个环境变量并记录它,而不是创建你自己独特的自定义格式;)在这种情况下,你也可以基于URI来设置'SetEnvIf',但是将该变量设置为一个特定的值。您的URI /查询字符串的剥离版本。我建议阅读这个:https://httpd.apache.org/docs/2.4/env.html和上面的'SetEnvIf'链接来了解如何实现这一点。 –