2017-04-11 6 views
1

elasticsearch 서버에 로그를 쓰는 데 filebeat을 사용합니다. 내 로그는 json 형식입니다. 모든 라인이filebeat @timestamp 덮어 쓰기되지 않음

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

처럼 내 로그에서 @timestamp 필드는 로그를 읽을 때 그 filebeat가 작성하는 @timestamp 필드를 대체 할 보이는 JSON 문자열입니다. 내 키바 대시 보드에 항상

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

을 얻고 filebeat

내 filebeat의 conf에 의해 생성 된 @timestamp 필드를보고 결국은 덮어 필드

log4j의 conf에서 또한
json.keys_under_root: true 
json.overwrite_keys: true 
json.add_error_key: true 

에 대한 그 라인을 포함하는 @timestamp 내 기록에 생성 된 필드는 ISO8601 형식입니다. 어떤 문제가 무엇이며 왜 @timestamp 필드를 덮어 쓰지 않는지?

답변

0

문제는 log4j이 생성하는 타임 스탬프 형식입니다. Filebeat는 "2017-04-11T09:38:33.365Z" 형식의 것이므로 중간에 T의 중간에 Z이 있어야하고 밀리 초 대신 쉼표 대신 점으로 표시되어야합니다.

가장 빠른 (다소 더러운) 방법은 그 다음 패턴

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

유사한 문제가 here을 찾을 수 있습니다를 사용했다 할 발견했다. 쉼표를 사용하기 때문에 제안 된 솔루션은 파일 비트 문제를 해결하지 못합니다!