从URL GROK Pattern

时间:2016-11-18 16:25:14

标签: elasticsearch logstash kibana logstash-grok

我有ELK运行日志分析。我有一切工作。我想做一些调整。对于堆栈溢出中的所有ES / ELK神,我很感激任何帮助。我很乐意给你买一杯咖啡! :d

示例:

网址:/origina-www.domain.com/this/is/a/path?page=2

首先,我希望得到如上所示的整个路径。

其次,我想在参数前面找到路径:/origina-www.domain.com/this/is/a/path

第三,我想得到的参数是:?page = 2

第四,我想让日志文件上的时间戳成为kibana上的主时间戳。目前,时间戳kibana显示的是处理ES的日期和时间。

这是示例条目的样子:

2016-10-19 23:57:32 192.168.0.1 GET /origin-www.example.com/url 200 1144 0 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "-" "-"

这是我的配置:

if [type] == "syslog" {
    grok {
      match => ["message", "%{IP:client}\s+%{WORD:method}\s+%{URIPATHPARAM:request}\s+%{NUMBER:bytes}\s+%{NUMBER:duration}\s+%{USER-AGENT}\s+%{QS:referrer}\s+%{QS:agent}%{GREEDYDATA}"]
          }
    date {
      match => [ "timestamp", "MMM dd, yyyy HH:mm:ss a" ]
      locale => "en"
    }   
}

ES版本:5.0.1 Logstash版本:5.0 Kibana:5.0

更新:我实际上可以通过使用:

来解决它
grok {
          match => ["message", "%{IP:client}\s+%{WORD:method}\s+%{URIPATHPARAM:request}\s+%{NUMBER:bytes}\s+%{NUMBER:duration}\s+%{USER-AGENT}\s+%{QS:referrer}\s+%{QS:agent}%{GREEDYDATA}"]
        }
        grok {
            match => [ "request", "%{GREEDYDATA:uri_path}\?%{GREEDYDATA:uri_query}" ]
        }

        kv {
            source => "uri_query"
            field_split => "&"
            target => "query"
        }

2 个答案:

答案 0 :(得分:1)

为了使用日志条目的实际timestamp而不是索引时间,您可以使用datemutate插件来覆盖现有的{{1}价值。您可以使用timestamp过滤器外观,如下所示:

logstash

您也可以跟进Question。希望它有所帮助。

答案 1 :(得分:0)

grok {           match => [" message","%{IP:client} \ s +%{WORD:method} \ s +%{URIPATHPARAM:request} \ s +%{NUMBER:bytes} \ s +%{NUMBER:持续时间} \ S +%{用户代理} \ S +%{QS:引荐} \ S +%{QS:代理}%{GREEDYDATA}"]         }         grok {             match => ["请求","%{GREEDYDATA:uri_path} \?%{GREEDYDATA:uri_query}" ]         }

    kv {
        source => "uri_query"
        field_split => "&"
        target => "query"
    }