Grok匹配单个定制模式,但是在组合定制模式时匹配。
完整,有效,可验证的示例
样本数据:
OK 05/20 20:12:10:067 ABC_02~~DE_02 FGH_IJK jsmith _A0011
自定义模式:
MMDD [0-1][0-9]/[0-3][0-9]
THREAD _A\w+
他们分开工作;具体来说,这种模式本身可以工作:
%{MMDD:mmdd}
// Result
{
"mmdd": [
[
"05/20"
]
]
}
...并且这种模式本身起作用:
%{THREAD:thread}
// Result
{
"thread": [
[
"_A0011"
]
]
}
..但在一起,他们失败了:
%{MMDD:mmdd} %{THREAD:keyword}
No Matches
令人费解。泰姆·基思(Tyvm Keith):^)
在这里测试:
https://grokdebug.herokuapp.com/
正则表达式资源:
https://regex101.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
根据下面的Jeff Y的评论进行编辑
注意将
keyword
更改为thread
// Grok Pattern
%{MMDD:mmdd}%{DATA}%{THREAD:thread}
// Result
{
"mmdd": [
[
"05/20"
]
],
"DATA": [
[
" 20:12:10:067 ABC_02~~DE_02 FGH_IJK jsmith "
]
],
"thread": [
[
"_A0011"
]
]
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
EDIT 2基于Jeff Y在下面的第二条评论
// Data - HACKED - Note move of _A0011 to after mm/dd
OK 05/20 _A0011 20:12:10:067 ABC_02~~DE_02 FGH_IJK jsmith
// Grok Pattern
%{MMDD:mmdd} %{THREAD:thread}
// Result
{
"mmdd": [
[
"05/20"
]
],
"thread": [
[
"_A0011"
]
]
}
最佳答案
Grok将针对整个消息测试您的模式。
如果您的消息是OK 05/20 _A0011 20:12:10:067 ABC_02~~DE_02 FGH_IJK jsmith
,而您只想要05/20
和_A0011
部分,则您的grok应该具有与其余字符串匹配的模式,但不要将其保存在字段中。
例如,%{WORD}%{SPACE}%{MMDD:mmdd}%{SPACE}%{THREAD:thread}%{SPACE}%{GREEDYDATA}
模式将匹配您的字符串,它将保存mmdd
和thread
杂项,但忽略其他所有内容。
关于regex - 多个自定义grok模式不匹配,但它们成功匹配一个吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57295068/