在 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.
等过滤器
我必须为给定行编写一个 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.
等过滤器