我们的设置:
我们在GCP中使用kubernetes。我们有将日志写入共享卷的pod,其中一个sidecar容器为我们的日志系统吸收了我们的日志。我们不能只使用stdout来代替这个过程。
其中一些pod是长寿命的,并且由于没有日志轮换而填满了磁盘空间。
问题:防止磁盘空间填满的最简单方法是什么(没有安排pod重启)?
我一直在尝试使用我们的Dockerfile中的RUN apt-get install -y logrotate
安装logrotate,并在/etc/logrotate.d/dynamicproxy
中放置一个logrotate配置文件,但它似乎没有运行。 /var/lib/logrotate/status
永远不会产生。
我觉得我正在咆哮错误的树或错过了使这个工作不可或缺的东西。任何帮助,将不胜感激。
通常,您应该将日志写入stdout并配置日志收集工具,如ELK堆栈。这是最佳做法。
但是,如果要将logrotate作为容器中的单独进程运行 - 您可以使用Supervisor,它可以作为一个非常简单的init系统,并允许您根据需要在容器中运行尽可能多的并行进程。
可以在此处找到使用Supervisor旋转Nginx日志的简单示例:https://github.com/misho-kr/docker-appliances/tree/master/nginx-nodejs
如果您写入文件系统,则创建日志的应用程序应负责轮换。如果您正在运行带有logback或log4j的Java应用程序,则只需更改配置即可。对于其他语言/框架,它通常是类似的。
如果这不是一个选项,您可以使用专门的工具来处理旋转并将输出管道输送到它。一个例子是http://cr.yp.to/daemontools/multilog.html
作为最后的手段,您可以调查以登录命名管道(FIFO)而不是真实文件,并让其他进程处理数据的检索和写入 - 包括旋转。