2016-09-19 72 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