【问题标题】:Grok Filter on Proxy Logs代理日志上的 Grok 过滤器
【发布时间】:2017-03-20 03:00:36
【问题描述】:

我正在尝试使用 ELK 堆栈中的 GROK 过滤器解析和构建原始代理数据,但我无法以正确的格式获取时间戳和用户代理字符串。请参考以下示例日志:

"1488852784.440 1 10.11.62.19 TCP_DENIED/403 0 GET http://xxx.xxx.com/xxx - NONE/- - BLOCK_WEBCAT_12-XXX-XXX-NONE-NONE-NONE-NONE <IW_aud,0.0,-,""-"",-,-,-,-,""-"",-,-,-,""-"",-,-,""-"",""-"",-,-,IW_aud,-,""-"",""-"",""Unknown"",""Unknown"",""-"",""-"",0.00,0,-,""-"",""-"",-,""-"",-,-,""-"",""-""> - L ""http://xxx.xxx.xxx"" 10.11.11.2 - 403 TCP_DENIED ""Streaming Audio"" - - - GET ""Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"" http://xxx.xxx.xxx"

我正在使用以下过滤器:

%{NUMBER:timestamp}%{SPACE}%{NUMBER:request_msec:float} %{IPORHOST:src_ip} %{WORD}/%{NUMBER:response_status:int} %{NUMBER:response_size} %{WORD:http_method} (%{URIPROTO:http_proto}://)?%{IPORHOST:dst_host}(?::%{POSINT:port})?(?:%{NOTSPACE:uri_param})? %{USERNAME:user} %{WORD}/(%{IPORHOST:dst_ip}|-)%{GREEDYDATA:content_type}

基于http://grokconstructor.appspot.com,我能够解析出除时间戳(1488852784.440)和用户代理字符串之外的一些字段。我在时间戳上尝试了不同的 Drok 默认过滤器,但它仍然显示为数字。

【问题讨论】:

    标签: regex proxy logstash elastic-stack logstash-grok


    【解决方案1】:

    这是因为 Grok 无法转换为 date 数据类型。为此,您需要使用 date 过滤器,它会为您进行精确转换。

    filter {
      date {
        match => [ "timestamp", UNIX_MS ]
      }
    }
    

    这会将事件的@timestamp 字段设置为timestamp 字段中已解析的时间戳。

    【讨论】:

    • 尊敬的系统管理员,请注意并感谢!您对用户代理字符串有任何解决方案吗?
    • @kenAu89 The grok pattern files 使用 %{QS:agent} 解析 Apache 日志中的用户代理。它也可能在这里工作。
    • 再次感谢。我将尝试 UA,一些定位问题,因为我得到了最后一个引用的字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多