如何避免 linux/kubernetes 中日志轮换期间的数据丢失?

如何避免 linux/kubernetes 中日志轮换期间的数据丢失?

简短的
我们在 AWS EKS 上的 kubernetes 中运行我们的工作负载。我们所有的应用程序都/var/log/app_logs使用 . 在目录中写入日志hostPath(是的,这不是最佳实践,这是由于遗留的代码库,最终我们希望转移到 STDOUT)。

我们面临的问题

  1. 我们每小时轮换一次logrotate文件/var/log/app_logs
  2. 在每小时的界限内,我们往往会丢失日志行
  3. 经调查似乎copytruncate正在造成此数据丢失
  4. 看起来应用程序无法在日志轮换期间写入日志文件,并且我们在轮换期间丢失了这些日志。
  5. 由于这些服务在容器/pod中运行kubernetes,我们将无法使用该stop服务rotatestart服务方法。

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 的环境中解决此问题。

相关内容