Logstash自定义匹配

Logstash custom matching

  AppliedProperty_PurchaseStatus = (string) <SOLD>
  AppliedProperty_UrlText = (string) <http://www.dummyurl.com>
  MA_Number= (decimal) [123456789]

我正在尝试弄清楚如何在为应用程序导入日志时使用 grok 进行一些匹配。但坦率地说,我很迷茫,我将如何进行上面的匹配,以便我可以搜索 "MA_Number" 并在 elastic

中得到“123456789”作为结果

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

  • [乱七八糟的
  • 1 个或多个号码
  • ] 和右括号

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

示范[​​=14=]

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

该数字的正则表达式,假设每一行都用 grok 逐行处理,将是:

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

NUMBER 是 grok 定义的模式,还有许多可以帮助您的模式:

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

关于您上面提供的消息(完全不符合您的 grok (??))

这是您可以快速测试 this/deploy 的方法:

我的测试配置:

input {
stdin{}
}


filter {

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

}


output {
  stdout { codec => rubydebug }
}

测试:

artur@pandaadb:~/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 中。