如何在logstash上添加新的时间戳字段?

时间:2016-09-27 14:58:31

标签: elasticsearch logstash kibana-4

我正在解析以前在我的localhost中加载的日志,我希望将每行中的事件日期字段作为时间戳,但kibana只能将其作为字符串获取。

示例: 我有这个活动

2016/09/27 13:33:49.701 GMT(09/27 15:33:49 +0200) INFO       BILLINGGW  ConvergysDelegate.getCustomer(): Calling getCustomerFromCache: 0001:606523

它载于 2016年9月27日,16:04:53.222 ,但是logdate字段(事件日期)为: 2016/09/27 13:33:49.701

在我定义的logstash过滤器上:

(?<logdate>%{NUMBER:year}/%{NUMBER:month}/%{NUMBER:day} %{HOUR:hday}:%{MINUTE:min}:%{SECOND:sec}) %{GREEDYDATA:result}

我也证明:

(?<logdate>%{YEAR:year}/%{MONTHNUM:month}/%{MONTHDAY:day} %{HOUR:hday}:%{MINUTE:min}:%{SECOND:sec}) %{GREEDYDATA:result}

kibana像字符串一样读取logdate。我怎样才能让kibana将其读作时间戳?

我只用日期证明:

(?<logdate>%{NUMBER:year}/%{NUMBER:month}/%{NUMBER:day})

和Kibana将其解释为时间戳,但问题是如何正确添加时间,分钟和秒到logdate字段。

有人可以帮助我吗?

最好的问候。

1 个答案:

答案 0 :(得分:0)

您必须使用date filter将字符串转换为时间戳。

date {
  match => [ "logdate", "yyyy/MM/dd HH:mm:ss"]
}

这会尝试使用此日期模式logdate解析yyyy/MM/dd HH:mm:ss字段,如果成功,则会将@timestamp字段替换为结果。您可以使用target选项为解析日期指定另一个字段。