2015-08-25 17 views
0

如何僅修剪到logstash中的密鑰的最後部分?僅在logstash中保留字段的最後部分

我已經格式化的http://aaa.bbb/get?a=1&b=2形式的網址,將它們放入「請求」和分裂基礎上的場「? &'保存GET參數。

我只關心特定的API調用,而不是主機或協議。我可以鏈接哪些過濾器以保留最後的'/'後面的部分?我已經閱讀了一些模式,但並未偶然發現如何引用拆分字段的最後部分。

 grok { 
      match => [ "message", "%{TIMESTAMP_ISO8601:timestamp} 
%{NOTSPACE:loadbalancer} %{IP:client_ip}:%{NUMBER:client_port:int} 
%{IP:backend_ip}:%{NUMBER:backend_port:int} 
%{NUMBER:request_processing_time:float} 
%{NUMBER:backend_processing_time:float} 
%{NUMBER:response_processing_time:float} 
%{NUMBER:elb_status_code:int} 
%{NUMBER:backend_status_code:int} 
%{NUMBER:received_bytes:int} %{NUMBER:sent_bytes:int} 
%{QS:request}" ] 
     } 
    date { 
     match => [ "timestamp", "ISO8601" ] 
    } 

    kv { 
     field_split => "&?" 
     source => "request" 
    } 

回答

0

我會建議採取現有的URI相關模式,並根據您的需要修改它們。你會注意到URIPATHPARAM解析出URIPATH和URIPARAM,但並沒有將它們推到字段中。

所以,讓自己的URIPATHPARAM:

MYURIPATHPARM URIPATHPARAM %{URIPATH:uripath}(?:%{URIPARAM:uriparam})? 

,然後從自己的URI稱之爲:

MYURI URI %{URIPROTO}://(?:%{USER}(?::[^@]*)[email protected])?(?:%{URIHOST})?(?:%{MYURIPATHPARAM})? 

在你以前的神交{},你結束了%{要求}。創建一個新的grok {},它通過MYURI運行[請求],並且最終應該包含您之後的兩個字段。

+0

謝謝阿蘭。我從錯誤的方向看問題。我使用以下內容結束:match => [「request」],「%{WORD:verb} \ s%{URIPROTO}://%{URIHOST}%{URIPATH:path}%{URIPARAM:params} \ s %{URORDER}}] –

+0

應該是:match => [「request」,「%{WORD:verb} \ s%{URIPROTO}://%{URIHOST}%{URIPATH:path}%{URIPARAM:params } \ S%{GREE DYDATA}「] –

相關問題