【问题标题】:Using separators between the grok expressions在 grok 表达式之间使用分隔符
【发布时间】:2020-06-03 19:01:22
【问题描述】:

我必须为给定的行写一个 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】:

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

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

    像这样:

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

    请注意,我还将 num 数据类型更改为 NUMBER:num:int,这将导致 ES 将此数据视为整数,以便您稍后使用更大/小于等过滤器。

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      相关资源
      最近更新 更多