简短的
我们在 AWS EKS 上的 kubernetes 中运行我们的工作负载。我们所有的应用程序都/var/log/app_logs
使用 . 在目录中写入日志hostPath
(是的,这不是最佳实践,这是由于遗留的代码库,最终我们希望转移到 STDOUT)。
我们面临的问题:
- 我们每小时轮换一次
logrotate
文件/var/log/app_logs
- 在每小时的界限内,我们往往会丢失日志行
- 经调查似乎
copytruncate
正在造成此数据丢失 - 看起来应用程序无法在日志轮换期间写入日志文件,并且我们在轮换期间丢失了这些日志。
- 由于这些服务在容器/pod中运行
kubernetes
,我们将无法使用该stop
服务rotate
和start
服务方法。
EKS 工作节点正在运行Amazon Linux(centos)
。
我们logrotate.conf
使用:
"/var/log/app_logs/*.log" {
create 664 foo foo
daily
missingok
copytruncate
rotate 7
compress
delaycompress
notifempty
sharedscripts
postrotate
/bin/bash /opt/scripts/upload-logs.sh
endscript
}
我们可以通过调整logrotate
配置来避免这种数据丢失吗?或者是否有任何类似的工具可以在基于 kubernetes 的环境中解决此问题。