【发布时间】:2025-11-29 03:15:01
【问题描述】:
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 基思 :^)
在这里测试: 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"
]
]
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
根据 Jeff Y 在下面的第二条评论编辑 2
// 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"
]
]
}
【问题讨论】:
-
我认为整行(一起行)被视为一种模式,并且您尝试匹配的元素不仅仅是那个空格,“”,它们之间的数据。也许试试
%{MMDD:mmdd}%{DATA}%{THREAD:keyword}? -
@JeffY 见上面的编辑。奇怪的是,对于使用标准模式的查询来说,这不是问题,可以很好地解析,如下所示:
%{WORD:word} %{TIME:time} -
它试图将包括该空格在内的整行与示例数据相匹配。如果您的线程和数据中的 mmdd 字段之间只有一个空格,它将起作用。如果它们之间还有其他东西,你必须考虑它。
%{DATA}是一个内置(核心)模式,基本上说“匹配任何东西”。 github.com/logstash-plugins/logstash-patterns-core/blob/master/… -
@JeffY 见上面的编辑 2。当我破解数据并将线程名称
_A0011移动到 mm/dd05/20旁边时,它确实匹配。 -
在对此进行了一番思考之后,也许这些 Grok 调试器旨在调试一个 Grok 模式,然后再插入其他地方,它能够应用多种模式。它们不打算在一行上解析多个模式。
标签: regex elasticsearch logstash kibana logstash-grok