2017-04-11 389 views
1

我用filebeat将日志写入elasticsearch服务器。我的日志采用json格式。每一行是一个JSON字符串,看起来像这样filebeat @timestamp没有被覆盖

{"@timestamp": "2017-04-11T07:52:480,230", "user_id": "1", "delay": 12} 

我想从我的日志@timestamp场更换@timestamp场读取日志时filebeat创建。在我kibana仪表盘我总是

json_error:@timestamp not overwritten (parse error on 2017-04-11T07:52:48,230)

,并最终看到由filebeat

我filebeat的conf创建@timestamp领域包括关于覆盖领域

json.keys_under_root: true 
json.overwrite_keys: true 
json.add_error_key: true 
从我 log4j的conf

而且这些线在我的日志中创建的@timestamp字段格式为ISO8601。任何想法是什么问题以及为什么@timestamp字段没有被覆盖?

回答

0

问题是log4j产生的时间戳的格式。 Filebeat需要的形式"2017-04-11T09:38:33.365Z"必须在最后Z中间有T,并且在毫秒之前使用点而不是逗号。

最快(和有点脏)的方式,我发现这样做是通过以下方式

pattern='{"@timestamp": "%d{YYYY-MM-dd}T%d{HH:mm:ss.SSS}Z"} 

类似的问题可以发现here。建议的解决方案不能解决filebeat问题,因为它使用逗号!