Grok重新创建时间戳和消息

百度

我正在尝试为以下格式创建grok模式:

October 27, 2015 03:44: lorem created a new project "lorem / ipsum"
October 27, 2015 03:48: lorem created a new project "lorem / ipsum-cp"
October 27, 2015 18:38: john created a new project "john / playgroud"
October 27, 2015 18:42: joseph created a new project "joseph / test-ci"

我找不到与完整日期匹配的单个表达式,因此我执行了以下操作:

grok {
    match => { "message" => "%{MONTH:month}%{SPACE}%{NUMBER:day}, %{YEAR:year}%{SPACE}%{HOUR:hour} %{NUMBER:minute}"}
}

因此,为日期时间戳记的所有部分创建了一组字段。现在,我在徘徊什么是处理该行其余部分并重新创建时间戳的最佳方法。

我当时正在考虑使用mutate将所有字段连接在一起,并通过日期过滤器对其进行解析,但是我是否应该message仅将参数重写为其余部分?喜欢lorem created a new project "lorem / ipsum"还是保留它以反映原始线条?

阿兰·柯林斯(Alain Collins)

要将行的其余部分放入字段中,请在模式末尾使用GREEDYDATA:

 %{GREEDYDATA:remainder}

由于我将主要数据放到了新字段中,因此通常将其余部分放回“邮件”字段中:

 %{GREEDYDATA:message}

这还需要在grok {}上设置“ overwrite”参数。

有两种获取单个日期的方法。如您所建议,将其中之一合并为logstash:

mutate {
   add_field => {
      "myDateField" => "%{myMonth} %{myDay} %{myYear}"
   }
}

然后,您需要一个针对date {}过滤器的匹配模式。

如果您只想要一个日期字段,则没有理由制作所有小字段(月,日,年)。使用grok模式将所需的所有内容都拉到一个字段中:

^(?<myDateField>[^:]+):

(“从该行的开头,不是冒号的所有内容都输入到名为myDateField的字段中”)

另一条评论:如果模式之间始终只有一个空格,请不要使用%{SPACE}。这更容易阅读:

%{YEAR:year} %{HOUR:hour}

尽管如果您可能有多个空格或其他类型的空格,请使用%{SPACE}。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章