【问题标题】:apache log files - getting data trimmed and filteredapache 日志文件 - 获取数据修剪和过滤
【发布时间】:2017-04-05 14:10:01
【问题描述】:

我正在寻找一个 apache 日志文件 - 目前它有大约 3m 行(因为它包括正在加载的图像和视频文件,基本上是任何带有 .jpg 的 url)但是在进行直接转储时进入 sql server 并在那里进行各种查询以删除这些以及删除重复项,我可以将其减少到 100k 行,然后从那里导出到 sql server 并链接到各种其他来源。

我想要得到的是下面的内容:

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 %t \"%r\" %>s

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

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

1.2.3.4 [15/Apr/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 Server 中,但需要从源头修剪数据集以帮助节省服务器空间,则很容易做到这一点。谢谢。

【问题讨论】:

    标签: sql-server apache logging


    【解决方案1】:

    由于您似乎在谈论 Apache 的 access_log,因此您必须在某些时候为 access_log 设置 CustomLog 指令。只需在行尾添加env=!dontlog,例如:

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

    然后定义尽可能多的规则来排除特定请求:

    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
    

    等等...要有创意,我的according Apache docs 会有所帮助:)

    【讨论】:

    • 谢谢,还有一件事,是否可以在此过程中删除部分 uri 字符串 - 例如[testurl]/testpage/testpage.html?promocode=test to [testurl]/testpage
    • 如果您使用 %U 记录 URI 或几乎任何其他标准变量,则不会。但是您始终可以定义一个环境变量并记录它来创建您独特的和自己的日志格式;)在这种情况下,您也可以基于 URI 使用 SetEnvIf,但将变量设置为特定值,例如URI/查询字符串的剥离版本。我建议阅读以下内容:httpd.apache.org/docs/2.4/env.htmlSetEnvIf 上的上述链接,以了解如何实现这一目标。
    猜你喜欢
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 2011-05-02
    相关资源
    最近更新 更多