2017-08-29 49 views
0

目標是:對於日誌中的每一行,應該有一個包含'message'(時間戳後的文本)的彈性文檔。每個文檔還應包含項目名稱,計劃名稱和構建編號的字段。 < - 這就是我越來越之初堅持如何使用logstash和Grok和索引作爲Kibana中每個記錄的字段從日誌中提取特定數據?

例如日誌結構(Atlassian的竹構建日誌):

simple 01-Jan-2016 14:26:01 Build TestProj - Framework Code - Build #25 (TST-FC-25) started building on agent .NET Core 2 
simple 01-Jan-2016 14:26:01 .NET-related builds, tests and publishing. 

我有一個神交來獲取和創建我的欄目 - 建立名稱,版本號和項目名稱(並讓他們在Kibana字段):

%{NOTSPACE:log_entrytype}%{SPACE}(?<timestamp>(?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])-\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b-(?>\d\d){1,2}\s*(?!<[0-9])%{HOUR}:%{MINUTE}(?::%{SECOND})(?![0-9]))%{SPACE}Build%{SPACE}%{DATA:BamProjName}%{SPACE}-%{SPACE}%{DATA:BamBuildName}%{SPACE}-%{SPACE}Build%{SPACE}#%{NUMBER:BamBuildNum} 

不過,我需要在Kibana每個記錄/項可用這些字段。有了這個其他的神交,我可以在日誌的其他線路提取到log_message場:

grok { [ 
      "message", "%{NOTSPACE:log_entrytype}%{SPACE}(?<timestamp>(?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])-\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b-(?>\d\d){1,2}\s*(?!<[0-9])%{HOUR}:%{MINUTE}(?::%{SECOND})(?![0-9]))%{SPACE}%{GREEDYDATA:log_message}" 
     ] 
    } 

所以我需要以某種方式結合這兩種模式匹配爲一體,使用「可選」:()?這裏描述的語法如何?:link

我的最終目標是單獨使用logstash和Grok插件實現的嗎?我可以在logstash中使用某種類型的變量構造來處理這個問題嗎? add_field?

***注:使用filebeat航運日誌,elastic does not recommend the multiline codec,所以我很好奇我的其他選項

回答

1

你需要用多事件的工作,看看官方文檔:https://www.elastic.co/guide/en/logstash/current/multiline.html

+0

由於我使用filebeat來運送日誌,因此elastic不建議使用多行編解碼器插件。從該鏈接:如果您使用支持多個主機的Logstash輸入插件,例如Beats輸入插件輸入插件,則不應使用Multiline編解碼器插件編碼解碼器來處理多行事件。這樣做可能會導致混合流和損壞的事件數據。在這種情況下,您需要在將事件數據發送到Logstash之前處理多行事件。 – JohnZaj

+0

好吧,試試看看這裏:https://www.elastic.co/guide/en/beats/filebeat/5.3/multiline-examples.html(沒有經驗在此分享) – whites11

+0

會做。然而,如果你可以有多個多行的話,那麼w/Filebeat甚至不會清楚。*用yml表示,因爲我已經需要一個將多行堆棧跟蹤合併成一條消息。 +1指向我的文檔 – JohnZaj

相關問題