【发布时间】:2018-12-08 10:12:18
【问题描述】:
目前,我在 kubernetes 中有以下架构:
- 在一个 pod 中,一个服务和一个 sidecar 容器(称为
logger)正在运行。 - 服务写入文件,sidecar 容器读取该文件并将其写入标准输出。
- fluentd daemonset 配置为读取输出(收集在
/var/log/containers/*_logger-*.log中的一个文件中,它是指向另一个文件的链接(自上次文件轮换以来的最新文件,指向较旧的文件,没有链接点) . - 总是有 3 条日志消息属于一起(一些相同的字段)
此配置对数千条消息按预期工作。
但是,问题来了:
我注意到 fluentd 有时只转发属于一起的 3 条消息中的 1 或 2 条日志消息,尽管所有 3 条消息都是由服务和 sidecar 容器编写的。
为了解释,假设1被转发,2和3不被转发。经过一番研究,我发现,在这种情况下,消息 1 是日志轮换之前的最后一条消息,消息 2 和 3 位于另一个文件中(符号链接自轮换以来指向的位置,因此应该阅读)。
因此,在 kubernetes 日志轮换后,fluentd 在继续读取新文件之前似乎跳过了一些行。
- 这是一个已知问题吗?
- 为什么fluentd和kubernetes会这样?
- 主要问题是:我可以做些什么来防止这种行为,以便接收所有日志消息?
我正在使用 docker-image fluent/fluentd-kubernetes-daemonset:v0.12.33-elasticsearch
如果需要更多信息,请告诉我。
【问题讨论】:
标签: logging kubernetes fluentd log-rotation