我的结构化日志消息中的时间字段来自哪里?

时间:2019-09-10 11:00:40

标签: docker elasticsearch logging kubernetes fluent-bit

我正在用一个称为origin_timestamp的唯一时间字段将json结构的日志消息写到stdout。

我使用Fluent Bit和尾部输入插件收集日志消息,该插件使用解析器docker。解析器使用Time_Key time配置。

有关Time_Key的文档说:

  

如果日志条目提供带有时间戳记的字段,则此选项   指定该字段的名称。

由于time!= origin_timestamp,我本来以为Fluent Bit不会添加任何时间字段,但是最终以Elasticsearch结尾的日志消息具有以下时间字段:

  • (包含原始日志消息的字段日志中的{origin_timestamp
  • origin_timestamp
  • time
  • @timestamp(有时甚至多次)。

@timestamp字段可能是我在Fluent Bit中使用的es输出插件添加的,但是 time字段到底来自哪里?

2 个答案:

答案 0 :(得分:2)

我在Fluent位问题跟踪器Duplicate @timestamp fields in elasticsearch output中遇到了以下问题,这听起来可能与您所讨论的问题有关。

我已经深深地链接到其中一位贡献者的特定评论,其中概述了两种可能的解决方案,具体取决于您是使用他们的Kubernetes Filter插件,还是直接将日志导入Elasticsearch。

希望这会有所帮助。

答案 1 :(得分:0)

docker json插件添加的时间字段。 Docker日志记录插件默认会从您的stdout中获取日志并以以下格式记录到文件中:

{"log":"Log line is here\n","stream":"stdout","**time**":"2019-01-01T11:11:11.111111111Z"}

因此,您可能会在最终日志中观察到三个时间戳:

  1. 由您添加(origin_timestamp)
  2. 由docker驱动程序添加(时间)
  3. 通过流利的位插件(@timestamp)添加

Ref-https://docs.docker.com/config/containers/logging/json-file/