2015-11-20 114 views
0

我试图创建以下格式神交模式:神交重新时间戳和消息

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"还是保持原样以反映原始线条?

回答

1

放线的其余部分为一个字段,使用GREEDYDATA在你的模式结束:

%{GREEDYDATA:remainder} 

因为我把领先的数据转换成一个新的领域,我通常会放余数返回到'消息'字段中:

%{GREEDYDATA:message} 

其中还需要在grok {}上设置'覆盖'参数。

有几种方法可以得到一个日期。在一个如你所说,他们在logstash结合:

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

然后你需要为日期{}过滤器匹配模式。

如果你只想要一个日期字段,那么几乎没有理由使所有的小字段(月,日,年)。使用拉一切你想要一个神交模式进入一个领域:

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

(“从线路的开始,一切,这不是一个冒号进入一个名为myDateField场”)

另一种意见:如果你总是在模式之间有一个空格,不要使用%{SPACE}。这是更容易阅读:

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

但如果你可能有多个空格或其他类型的空白,那么就使用%{空白}。

+0

它工作非常好,谢谢! – FBidu