filebeat @timestamp 未被覆盖

filebeat @timestamp not overwritten

我使用 filebeat 将日志写入 elasticsearch 服务器。我的日志采用 json 格式。每行都是一个 json 字符串,看起来像这样

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

我希望日志中的 @timestamp 字段替换 filebeat 在读取日志时创建的 @timestamp 字段。在我的 kibana 仪表板上,我总是得到

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

并最终看到由 filebeat

创建的 @timestamp 字段

我的 filebeat conf 包括那些关于覆盖字段的行

json.keys_under_root: true
json.overwrite_keys: true
json.add_error_key: true

另外,根据我的 log4j conf,在我的日志中创建的 @timestamp 字段采用 ISO8601 格式。知道问题出在哪里以及为什么 @timestamp 字段没有被覆盖吗?

问题是 log4j 生成的时间戳的格式。 Filebeat 期望某种形式的 "2017-04-11T09:38:33.365Z" 它必须在中间 T 最后 Z 并且在毫秒之前用点而不是逗号。

我发现最快(也有点脏)的方法是使用以下模式

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

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