线上服务突然出现无法访问Redis的问题,经排查是Redis无法写磁盘因为磁盘空间不足。
排查步骤:
- 使用
du -sh *
命令逐一找到空间占用最大的目录 - 发现
/var/lib/docker/containers
目录占用了97G磁盘空间 - 然后继续排查发现其中一个容器实例的日志文件有97G,该容器实例是网关类应用会不断输出所有请求日志
原因
正常日志输出会配置log rotate
来保证日志文件不会无限制增大,但docker默认安装不会配置log rotate
解决办法
一、全局配置
-
在
/etc/docker/daemon.json
文件中添加关于日志的参数(无此文件的可以新建):{ "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "1" } }
-
重启docker
systemctl daemon-reload systemctl restart docker
-
注意这里还要重新启动容器,新建的容器配置才会生效
-
通过
docker inspect 容器id -f {{.HostConfig.LogConfig}}
检查上述配置是否存在,存在就说明配置生效{json-file map[max-file:1 max-size:100m]}
二、容器级别的配置
在docker-compose文件中加入类似的配置,同样需要重新创建容器
version: '3'
services:
服务名:
...
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "1"