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]);
}
该数字的正则表达式,假设每一行都用 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 中。
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]);
}
该数字的正则表达式,假设每一行都用 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 中。