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

问题描述 投票:1回答:1

我必须为给定的行写一个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})
logstash elastic-stack logstash-grok
1个回答
1
投票

首先,我建议不要把日期分解成许多字段,如日、时、分、秒等(通常你不需要这样做)。(通常情况下,您不需要将它们分开),而是使用 "日期 "这个词组。TIMESTAMP_ISO8601 数据类型。

第二部分的问题不是因为"::",而是因为"::"。()......这些特殊字符被regex使用。为了使用它们, 你必须像这样转义: \( and \).

像这样。

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

注意,我还把num数据类型改成了NUMBER:num:int 这将使ES把这些数据当作整数来处理 使你以后可以使用过滤器,比如biggersmaller than.

© www.soinside.com 2019 - 2024. All rights reserved.