在 grok 表达式之间使用分隔符

Using separators between the grok expressions

我必须为给定行编写一个 grok 表达式:

2019-11-14 17:29:20 fqm.kfa::(1087651)

我可以为 :: 之前的部分编写 grok,如下所示:

%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:?%{MINUTE}(?::?%{SECOND})?\s*%{WORD:word1}.%{WORD:word2}

而且效果很好。但是,当我尝试合并 :: 之后的行部分时,它显示 No matches

%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:?%{MINUTE}(?::?%{SECOND})?\s*%{WORD:word1}.%{WORD:word2}::(%{INT:num})

首先,我建议不要将日期分解为许多字段,例如天、小时、分钟、秒等(通常您不需要单独使用它们)来使用 TIMESTAMP_ISO8601 数据类型。

第二部分有问题不是因为“::”,而是因为 ()。正则表达式使用的这些特殊字符。为了使用它们,您必须像这样转义它们:\(\).

像这样:

^%{TIMESTAMP_ISO8601:event_timestamp}%{SPACE}%{WORD:word1}.%{WORD:word2}::\(%{NUMBER:num:int}\)$

请注意,我还将 num 数据类型更改为 NUMBER:num:int,这将导致 ES 将此数据视为整数,以便您稍后可以使用 bigger/smaller than.

等过滤器