写点什么

设定 Docker 容器日志的大小和轮询规则

用户头像
耳东
关注
发布于: 3 小时前

1.前言

用 Docker 管理 MySQL 实例的时候我遇到了 Docker 容器内日志文件增长过快的问题。


我的 VPC 云主机根目录(/)有 40GB 的空间,但是当我启动几个 MySQL 容器用于同步数据后,我的根目录空间被急速的占用。


究其原因是 Docker 容器的日志(/var/lib/docker/containers//.log)占用了大量的空间,抛开日志内记录的内容不说。希望在咱们的生产环境统一设定 Docker 容器的日志大小和轮训规则。

2.解决方法

在 StackOverflow 上找到与上述问题相关的讨论( https://stackoverflow.com/questions/42510002/how-to-clear-properly-the-logs-of-docker-container )


可以通过如下三种方法满足我的要求:

2.1. 配置 dockerd 的启动参数限定日志大小和数量

dockerd ... --log-opt max-size=10m --log-opt max-file=3
复制代码

2.2. 配置 logrotate 对日志进行轮训和压缩

Example file in /etc/logrotate.d/docker-logs


/var/lib/docker/containers/*/*.log { rotate 7 daily compress size=50M missingok delaycompress copytruncate}
复制代码

2.3. 设定定时任务定时 truncate 日志文件

truncate -s 0 /var/lib/docker/containers/*/*-json.log
复制代码


个人偏向于第一种方案。


当前阶段 Docker 的 log driver 还是以 json-file 为主,所以会每个容器会在 Docker 宿主机本地文件系统上保存大量的日志文件,默认配置下日志大小无限制,导致了这个问题。


我也倾向使用第一种方式,对 json-file 的 log driver 进行相应的配置,具体配置项目参考官方文档


https://docs.docker.com/engine/admin/logging/json-file/


目前我们假设一台 Docker 宿主机上最多运行 5 个容器,每个容器日志文件大小限制为 100MB,日志文件个数 3 个。那最多会占用 Docker 宿主机本地文件系统 1.5GB 磁盘空间。Docker 宿主机本地文件系统为 40GB,这个磁盘占用可以接受。


准备在 Docker 的 daemon.json 中增加配置


{  "log-driver": "json-file",  "log-opts": {    "max-size": "100m",    "max-file": "3"  }}
复制代码


更新 /etc/docker/daemon.json 文件配置后,重启 Docker daemon,由于开启了 Live Restore ,已经运行的容器不会受影响(不会被重启)。但在配置修改前已经创建了的容器无法获得这个日志的配置,可以通过命令 docker inspect -f {{.HostConfig.LogConfig}} <CONTAINER> 查看当前容器日志配置,默认输出为 {json-file map[]}


需要对容器进行销毁后重建,重启容器无效。重建容器后再执行 docker inspect -f {{.HostConfig.LogConfig}} <CONTAINER>,可以看到输出为 {json-file map[max-file:3 max-size:100m]} 表示日志配置生效

发布于: 3 小时前阅读数: 3
用户头像

耳东

关注

还未添加个人签名 2020.05.24 加入

主要研究分享运维技术,专注于监控、CICD、操作系统、云原生领域,公众号【耳东学堂】,知识星球同名,坚持原创,希望能和大家在运维路上结伴而行 邮箱:erdong@mail.erdong.site

评论

发布
暂无评论
设定Docker容器日志的大小和轮询规则