【问题标题】:How can I get log rotation working inside a kubernetes container/pod?如何在 kubernetes 容器/pod 中进行日志轮换?
【发布时间】:2019-09-09 03:05:33
【问题描述】:

我们的设置:

我们在 GCP 中使用 Kubernetes。 我们有将日志写入共享卷的 pod,还有一个 sidecar 容器,可以为我们的日志系统吸收我们的日志。 我们不能只使用标准输出来代替这个过程。

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

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

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

我觉得我找错了树,或者错过了让这项工作发挥作用不可或缺的东西。任何帮助将不胜感激。

【问题讨论】:

    标签: kubernetes google-cloud-platform logrotate


    【解决方案1】:

    一般情况下,您应该将日志写入标准输出并配置日志收集工具,如 ELK 堆栈。这是最佳做法。

    但是,如果您想在容器中将 logrotate 作为单独的进程运行 - 您可以使用 Supervisor,它作为一个非常简单的 init 系统,允许您在容器中运行任意数量的并行进程。

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

    【讨论】:

      【解决方案2】:

      我们最终编写了自己的守护程序集,以从节点而不是容器级别正确收集日志。然后我们停止从容器写入共享卷并仅记录到标准输出。

      我们使用 fluentd 来记录周围的日志。

      https://github.com/splunk/splunk-connect-for-kubernetes/tree/master/helm-chart/splunk-kubernetes-logging

      【讨论】:

        【解决方案3】:

        如果您写入文件系统,则创建日志的应用程序应负责轮换。如果您正在使用 logback 或 log4j 运行 java 应用程序,那么这是简单的配置更改。对于其他语言/框架,它通常是相似的。

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

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

        【讨论】:

          猜你喜欢
          • 2019-07-21
          • 2018-11-16
          • 1970-01-01
          • 2017-12-24
          • 2018-07-27
          • 1970-01-01
          • 2010-12-02
          • 2018-09-14
          • 2020-05-13
          相关资源
          最近更新 更多