首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker守护进程日志占用了太多的磁盘空间

Docker守护进程日志占用了太多的磁盘空间
EN

Stack Overflow用户
提问于 2018-06-25 15:36:14
回答 1查看 1K关注 0票数 1

序言

为了澄清这一点,我们需要关注的是坞守护进程日志,而不是而不是,用于docker的容器级日志。日志驱动程序和日志选择停靠守护进程配置似乎能够很好地处理容器级日志。

描述

我们遇到的问题是,停靠守护进程日志(位于/var/log/docker.err.log)日志文件增长过快,不能在我们的坞群生产服务器上旋转。从长远来看,我们自然会担心磁盘空间。具体来说,我们已经运行了将近一个月,在一个节点上,日志文件已经增长到5.1GB。由于我们的VM预计将连续运行数月,这显然是一个令人担忧的趋势。

我们正在使用的linuxkit OS的配置与示例码头配置非常相似,在/etc/docker/daemon.json文件中有一些附加配置,最显著的是,我们将设置为True。显然是一个错误,因为我们的测试表明,如果不使用该选项,日志文件将大大减少。

然而,即使我们将日志级别保留在其默认的info中,在我看来,如果服务器运行时间太长,日志文件仍然会引起问题。我的一位同事做了一些粗略的计算,他的猜测是,如果守护进程继续运行6个月左右,该文件仍然可以增长到10 so左右。

我们尝试了什么,

我们一直在尝试使用手动日志旋转解决方案来防止这种情况,但似乎停靠守护进程从未重新加载它的日志文件,这意味着当log旋转机完成任务并创建一个空白的新docker.err.log时,停靠守护进程将继续在任何偏移量处写入,并将文件的其余部分填充为空字节,占用的空间与以前一样大。我们已经尝试了一些解决方案,包括将HUP信号发送到对接进程,但没有成功;看来对接守护进程没有处理该信号,或者至少没有以重新加载它的日志文件的方式处理。

问题

是否有一种可接受的方法来实现码头守护进程日志的旋转?

似乎不寻常的是,我们找不到任何有关这方面的信息,因为似乎有人曾经遇到过这个问题。还是其他运行在群集上的服务器会在某个时候定期重新启动服务器?理想情况下,我们希望找到一种基于linuxkit的方法来具体地旋转日志文件。

此外,是否有一种方法可以在不关闭服务器或停靠守护进程实例的情况下截断正在运行的服务器上的现有docker.err.log?我们希望不惜一切代价地避免不得不部署更新的OS映像,以防止docker守护进程日志耗尽我们所有的磁盘空间。

复制的步骤

  • 在linuxkit OS ISO中使用带有调试的docker守护进程服务创建linuxkit OS ISO:在其配置文件中为True
  • 使用该ISO,运行一个停靠群集群数天。
  • 观察docker.err.log文件的增长

Linuxkit Config

代码语言:javascript
复制
kernel:
  image: linuxkit/kernel:4.15.5
  cmdline: "console=tty0 quiet console=ttyAMA0"
init:
  - linuxkit/init:6061875ba11fd9c563fda6234b103ed9997ff782
  - linuxkit/runc:52ecfdef1ae051e7fd5ac5f1d0b7dd859adff015
  - linuxkit/containerd:13f62c61f0465fb07766d88b317cabb960261cbb
  - linuxkit/ca-certificates:0a188e40108b6ece8c2aefdfaaad94acc84368ce
 ...

services:
   - name: docker
    image: docker:17.12.0-ce-dind
    capabilities:
     - all
    net: host
    mounts:
     - type: cgroup
       options: ["rw","nosuid","noexec","nodev","relatime"]
    binds:
     - /tiles:/tiles
     - /etc/resolv.conf:/etc/resolv.conf
     - /tmp/hosts:/etc/hosts
     - /root/.ssh:/root/.ssh
     - /var/lib/docker:/var/lib/docker
     - /lib/modules:/lib/modules
     - /etc/docker/daemon.json:/etc/docker/daemon.json
     - /persistent:/persistent
     - /application:/application
    command: ["/usr/local/bin/docker-init", "/usr/local/bin/dockerd"]

files:
  - path: etc/docker/daemon.json
    contents: |
        {
          "debug": true,
          "data-root": "/persistent/docker",
          "insecure-registries" : ["foobar-docker-registry.chip:5000"],
          "log-driver": "json-file",
          "log-opts": {
            "max-size": "100m",
            "max-file": "4"
          }
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-17 22:21:43

为了结束这个问题,这不再是linuxkit中的问题了。自那以后,他们增加了使用memlogd的日志记录支持,以及他们自己的日志编写器,后者处理自动旋转。这是他们的测井文件的链接。

yaml的配置如下:

代码语言:javascript
复制
init:
  # A circular buffer that captures logs from onboot and service-level containers
  - linuxkit/memlogd:v0.7
  ...
services:
  - name: write-and-rotate-logs
    image: foobar/logwrite
    command: ["/usr/bin/logwrite",
              "-log-dir", "/persistent/log/bespin",
              # Keep at most 25 files (Note: file numbers are 0-based)
              "-max-log-files", "25",
              # Max log file size set to 200MB (200 * 1024 * 1024 = 209,715,200 bytes)
              "-max-log-size", "209715200"]

这将捕获所有linuxkit服务日志,包括docker守护进程日志,并将它们写入磁盘。它在书写时处理旋转。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51027174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档