2016-11-18 220 views
1

我有ELK運行日誌分析。我有一切工作。我只想做一些調整。對於所有的ES/ELK神在stackoverflow,我會很感激這方面的任何幫助。我很樂意給你買一杯咖啡! :d從URL GROK模式提取參數(子字符串)

例子:

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

首先,我想獲得的整個路徑由上述可見。

其次,我想參數之前得到公正的路徑:/origina-www.domain.com/this/is/a/path

第三,我希望得到公正的參數:第四,我想使日誌文件上的時間戳成爲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" 
     } 
+0

千伏本來是我的建議,你應該張貼您的解決方案作爲自身的答案,以幫助他人有類似問題在未來 –

+0

@WillBarnwell我該怎麼做?我在這裏很新,仍然在學習SO的工作原理。 :) –

+0

順便說一句,@WillBarnwell我確實有最後一個問題在那裏,第四個關於改變kibana的時間戳以使用每個日誌條目的實際時間和日期。也許你可以幫助我呢? :)非常感謝,因爲我正在學習ES上的繩索。 –

回答

1

爲了使用實際的日誌條目timestamp而不是索引時間,可以使用datemutate插件來覆蓋現有的timestamp值。你可以有你的logstash過濾器的樣子,這樣的事情:

 //filtering your log file 
     grok { 
       patterns_dir => ["/pathto/patterns"] <--- you could have a pattern file with such expression LOGTIMESTAMP %{YEAR}%{MONTHNUM}%{MONTHDAY} %{TIME} if you have to change the timestamp format. 
       match => { "message" => "^%{LOGTIMESTAMP:logtimestamp}%{GREEDYDATA}" }   
     } 
     //overriding the existing timestamp with the new field logtimestamp 
     mutate { 
       add_field => { "timestamp" => "%{logtimestamp}" } 
       remove_field => ["logtimestamp"] 
     } 
     //inserting the timestamp as UTC 
     date { 
       match => [ "timestamp" , "ISO8601" , "yyyyMMdd HH:mm:ss.SSS" ] 
       target => "timestamp" 
       locale => "en" 
       timezone => "UTC" 
     } 

你可以跟進Question更多的爲好。希望能幫助到你。

+0

太棒了!感謝你! :D –

+0

很高興幫助:) – Kulasangar

0

grok {= {「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" 
    }