我必须为给定的行写一个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
数据类型。
第二部分的问题不是因为"::",而是因为"::"。(
和 )
......这些特殊字符被regex使用。为了使用它们, 你必须像这样转义: \(
and \)
.
像这样。
^%{TIMESTAMP_ISO8601:event_timestamp}%{SPACE}%{WORD:word1}.%{WORD:word2}::\(%{NUMBER:num:int}\)$
注意,我还把num数据类型改成了NUMBER:num:int 这将使ES把这些数据当作整数来处理 使你以后可以使用过滤器,比如biggersmaller than.