2014-06-11 35 views
1

我已在AWS上啓用了我的ELB的訪問日誌,並且將它們發送到logstash + elasticsearch + kibana的設置。 我正在使用logstash的grok過濾器將日誌解析爲單獨的字段,我可以查看和排序在kibana中,並運行到解析amazon在這些日誌中提供的最後一個字段(即「請求」字段)的難題。它實際上包含3個部分。 HTTP方法,URL本身和HTTP版本。解析來自AWS ELB日誌的「請求」字段

我怎樣才能將這些3分成獨立的字段,我可以使用?

感謝 本雅明

+0

請說明你試過的東西,結果以及你發現的結果,以及它爲什麼不按照你期望的方式工作。 –

+0

這是我目前使用的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}「]'。 –

+0

最後一個字段,「請求」返回一個像這樣的字符串:'「\」GET https://example.com:443/template/genGetPCServerA11.xml?im eiPar = 9dfbaa0af01edea&versionPar = 3000000&userPar =%2B919910030185&appType = 6 HTTP/1.1 \ 「」'。我不確定如何將這個字符串分成3個部分。我正在考慮嘗試awk和grep,但我不知道如何將它們合併到logstash配置中。 –

回答

1

什麼這樣的事情,要更換你的神交過濾器的最後一個元素?

\"%{WORD:verb} %{NOTSPACE:request} HTTP/%{NUMBER:httpversion}\" 

我從未之前給予logstash,但我通過查看內置過濾器,其中一些顯然是建立在其他內置過濾器頂部的源代碼拼湊了一起。

https://github.com/elasticsearch/logstash/blob/v1.4.1/patterns/grok-patterns

這種模式應該提取三個要素中,「動詞」將捕獲「GET」和「httpversion」將捕獲的數字HTTP版本,以及「請求」將捕獲的其餘部分。

我承認我也在猜測反斜槓以避免消息中的雙引號文字,但這似乎是包含一個字面引用以匹配ELB放入日誌的邏輯方式。請注意,我顯示的最後一個雙引號不是過濾器字符串表達式的結尾引號。該報價將在上述之後立即執行,因爲這與每一行中的最後一項匹配。

+0

謝謝!您的過濾器完美適用於我想要的東西。 –

+0

如果我可能會問同一線程的另一件事 - 任何想法如何我可以解析url中的其餘參數?例如正在被請求的文件(在本例中是'genGetPCServerA11.xml',然後是其他的參數(imiPar,versionPar,userPar,appType)? –

+0

看看我發佈的鏈接的源代碼。注意''URI'過濾器如何引用'URIPATHPARAM'過濾器並從那裏開始。一旦你掌握了正則表達式,特別是可選匹配的概念,你應該能夠提取任何你需要的東西。 –