【问题标题】:Logs are not shown in order after shipped to Elasticsearch using Fluentd使用 Fluentd 发送到 Elasticsearch 后,日志未按顺序显示
【发布时间】:2020-05-07 07:56:33
【问题描述】:

我们在 Kubernetes 中部署了一个应用程序,所有应用程序都配置为记录到标准输出。我们使用 fluentd DaemonSet 从/var/lib/docker/containers/ 文件夹收集日志并将它们发送到 ElasticSearch 集群。 /var/lib/docker/containers/kubectl logs <podname> 中的 k8s 聚合日志文件都具有命令应用程序正确生成它们的日志行。 ElasticSearch集群连接了一个Kibana实例,日志按照@timestamp排序显示,这里的日志顺序是错误的(和flie中的顺序不一样)。由于应用程序的性质,在同一个@timestamp 中生成了多个日志,只有那些没有正确排序。有没有办法在从 fluentd 发货时发送行号或偏移量(递增数字)并使用 @timestamp 和该值的组合来正确排序?或者是否有其他方法可以在索引后获得与kubectl logs <podname> 显示的相同顺序?

【问题讨论】:

  • docker 日志有自己的时间戳,那里的时间戳也一样吗?
  • 我也注意到了这个问题,期待一些解决方案。

标签: elasticsearch kubernetes kibana fluentd efk


【解决方案1】:

Docker 容器设置为使用 UTC 时间戳,因此,如果您使用 fluentd 日志驱动程序将 docker 日志传送到 fluentd 容器,那么日志将带有 fluentd 容器的 UTC 时间戳。但是,如果您使用 journald 日志驱动程序向 fluentd 容器发送日志消息,那么它将保留本地时间戳。您可以在 docker-compose 文件中将容器的时间戳调整为本地时间,如下所示:

environment:
  - TZ=America/Los_Angeles debian:jessie date

【讨论】:

  • 谢谢,但这里的问题不在于使用的时间戳。时间戳中的值是正确的,但是在同一个时间戳中生成了多条日志行。这些在 Kibana 中没有以正确的顺序显示,因为它仅使用时间戳值排序。
猜你喜欢
  • 2022-07-07
  • 1970-01-01
  • 2020-01-18
  • 1970-01-01
  • 2017-11-18
  • 2018-07-18
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多