如何在kubernetes容器/ pod中进行日志轮换?

问题描述 投票:0回答:2

我们的设置:

我们在GCP中使用kubernetes。我们有将日志写入共享卷的pod,其中一个sidecar容器为我们的日志系统吸收了我们的日志。我们不能只使用stdout来代替这个过程。

其中一些pod是长寿命的,并且由于没有日志轮换而填满了磁盘空间。

问题:防止磁盘空间填满的最简单方法是什么(没有安排pod重启)?

我一直在尝试使用我们的Dockerfile中的RUN apt-get install -y logrotate安装logrotate,并在/etc/logrotate.d/dynamicproxy中放置一个logrotate配置文件,但它似乎没有运行。 /var/lib/logrotate/status永远不会产生。

我觉得我正在咆哮错误的树或错过了使这个工作不可或缺的东西。任何帮助,将不胜感激。

kubernetes google-cloud-platform logrotate
2个回答
1
投票

通常,您应该将日志写入stdout并配置日志收集工具,如ELK堆栈。这是最佳做法。

但是,如果要将logrotate作为容器中的单独进程运行 - 您可以使用Supervisor,它可以作为一个非常简单的init系统,并允许您根据需要在容器中运行尽可能多的并行进程。

可以在此处找到使用Supervisor旋转Nginx日志的简单示例:https://github.com/misho-kr/docker-appliances/tree/master/nginx-nodejs


0
投票

如果您写入文件系统,则创建日志的应用程序应负责轮换。如果您正在运行带有logback或log4j的Java应用程序,则只需更改配置即可。对于其他语言/框架,它通常是类似的。

如果这不是一个选项,您可以使用专门的工具来处理旋转并将输出管道输送到它。一个例子是http://cr.yp.to/daemontools/multilog.html

作为最后的手段,您可以调查以登录命名管道(FIFO)而不是真实文件,并让其他进程处理数据的检索和写入 - 包括旋转。

© www.soinside.com 2019 - 2024. All rights reserved.