我正在尝试为以下格式创建一个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"
一样,或者保持不变以反映原始行?
答案 0 :(得分:1)
要将该行的其余部分放入字段中,请在模式的末尾使用GREEDYDATA:
%{GREEDYDATA:remainder}
由于我将领先数据放入新字段,因此我们通常会将其余内容放回“'消息”中。字段:
%{GREEDYDATA:message}
还需要覆盖'要在grok {}上设置的参数。
有几种方法可以获得单一日期。如你所建议的那样,将它们组合在logstash中:
mutate {
add_field => {
"myDateField" => "%{myMonth} %{myDay} %{myYear}"
}
}
然后您需要匹配日期{}过滤器的模式。
如果您只想要一个日期字段,那么就没有理由制作所有小字段(月,日,年)。使用grok模式将所需内容拉到一个字段中:
^(?<myDateField>[^:]+):
(&#34;从该行的开头,所有不是冒号的内容都会进入名为myDateField&#34的字段;)
另一个评论:如果您在模式之间总是只有一个空格,请不要使用%{SPACE}。这更容易阅读:
%{YEAR:year} %{HOUR:hour}
虽然如果你有多个空格或其他类型的空格,那么请使用%{SPACE}。