Elasticsearch/Kibana显示错误时间戳求助:Filebeat覆盖日志原时间戳
问题分析与解决方案
问题原因
Filebeat默认会将事件的@timestamp字段设置为日志被采集传输的时间,即便原始日志本身包含@timestamp字段,Filebeat也会默认覆盖该字段,这就是你看到原始时间戳丢失、显示传输时间的核心原因。
解决方案
针对你的NDJSON格式日志,有两种高效的处理方式:
方式1:通过Parser直接指定原始时间戳字段
修改filebeat.inputs中的NDJSON解析配置,禁止覆盖原始字段并指定用日志自带的@timestamp作为事件时间:
filebeat.inputs: - type: filestream id: pls-logs paths: - /usr/share/filebeat/logs/*.log parsers: - ndjson: target: "" overwrite_keys: false # 关键:禁止覆盖原始日志中的同名字段 timestamp: field: "@timestamp" # 指定从原始日志的@timestamp字段提取时间 layouts: - "2006-01-02T15:04:05.999Z07:00" # 匹配你的时间戳格式
方式2:通过处理器保留并替换时间戳
先将原始日志的@timestamp重命名备份,再用备份字段替换Filebeat生成的传输时间:
processors: # 第一步:备份原始时间戳字段 - rename: fields: - from: "@timestamp" to: "log_original_timestamp" ignore_missing: true # 第二步:用原始时间戳替换Filebeat生成的@timestamp - timestamp: field: log_original_timestamp layouts: - "2006-01-02T15:04:05.999Z07:00" ignore_missing: true - add_cloud_metadata: ~
验证
修改配置后重启Filebeat,在Kibana中查看事件:此时@timestamp会显示日志原始的时间戳,若用方式2还能看到log_original_timestamp字段作为备份。
内容的提问来源于stack exchange,提问作者willstef
相关产品推荐
相关产品推荐

