2016-09-19 74 views
0
AppliedProperty_PurchaseStatus = (string) <SOLD> 
    AppliedProperty_UrlText = (string) <http://www.dummyurl.com> 
    MA_Number= (decimal) [123456789] 

我想弄清楚如何在導入應用程序日誌時與grok進行一些匹配。不過說實話,我很失落,如何將我去上面這樣我就可以搜索「MA_Number」匹配,並獲得「123456789」作爲結果的彈性Logstash自定義匹配

+0

使用類似'MA_Number \ s * = \ s * \(decimal \)\ s * \ [%{NUMBER:num}]'([pandaadb's solution](http://stackoverflow.com/a/39572722/3832970)似乎是可行的,只是命名變量)。 –

回答

1

正則表達式對這個數字,假設有每行處理的一個接一個的,與神交,將是:

MA_Number= \(decimal\) \[%{NUMBER}\] 

NUMBER是由grok定義的模式,旁邊是一個很多的模式,可以幫助你:

https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns

至於你上面提供的消息(這不你神交匹配所有(?))

這是你如何可以快速測試這種/部署此:

我的測試配置:

input { 
stdin{} 
} 


filter { 

    grok { 
     match => ["message", "MA_Number= \(decimal\) \[%{NUMBER:num}\]" ] 
    } 

} 


output { 
    stdout { codec => rubydebug } 
} 

測試:

[email protected]:~/dev/logstash$ ./logstash-2.3.2/bin/logstash -f conf3/ 
Settings: Default pipeline workers: 8 
Pipeline main started 
MA_Number= (decimal) [123456789] 
{ 
     "message" => "MA_Number= (decimal) [123456789]", 
     "@version" => "1", 
    "@timestamp" => "2016-09-19T13:30:56.837Z", 
      "host" => "pandaadb", 
      "num" => "123456789" 
} 

看看如何將消息的編號提取到變量num中。

+0

呃是的,認爲這將是更容易修改配置。但是如果你在帖子中看我的編輯,我必須忍受我的驕傲並再次尋求幫助。你將如何實現該行?嘗試了一些東西,但無法使其工作。 – Jakodns

+0

你配置中的grok與你給出的例子日誌語句不匹配 – pandaadb

+0

不,我意識到這一點,我想不出如何添加你的例子。 – Jakodns

0

您可以使用\[([0-9]+)\],它將匹配:

  • [litteral
  • 1或多個數字
  • ]和右括號

https://regex101.com/r/sP3gA7/2

示範

var re = /\[([0-9]+)\]/; 
 
var str = ' AppliedProperty_PurchaseStatus = (string) <SOLD>\n AppliedProperty_UrlText = (string) <http://www.dummyurl.com>\n MA_Number= (decimal) [123456789]'; 
 
var m; 
 
    
 
if ((m = re.exec(str)) !== null) { 
 
    if (m.index === re.lastIndex) { 
 
     re.lastIndex++; 
 
    } 
 
    console.log(m[1]); 
 
}

https://regexper.com/#%5C%5B(%5B0-9%5D%2B)%5C%5D