Docker 日志把磁盘吃光了?三招管住 json-file 日志
【摘要】 很多人的服务器第一次"无故"宕机,凶手都是 Docker 日志。默认的 json-file 日志驱动不做任何轮转,容器跑得越久,/var/lib/docker/containers 下的 *-json.log 越大,直到把磁盘写满、服务全挂。下面三招,从治标到治本。第一招:先止血——找到并清理大日志先看是谁在吃磁盘:du -sh /var/lib/docker/containers//-js...
很多人的服务器第一次"无故"宕机,凶手都是 Docker 日志。默认的 json-file 日志驱动不做任何轮转,容器跑得越久,/var/lib/docker/containers 下的 *-json.log 越大,直到把磁盘写满、服务全挂。下面三招,从治标到治本。
第一招:先止血——找到并清理大日志
先看是谁在吃磁盘:
du -sh /var/lib/docker/containers//-json.log | sort -rh | head
确认是日志文件后可以直接截断(不要 rm,容器还 hold 着文件句柄,删了空间也不释放):
: > /var/lib/docker/containers/<容器ID>/<容器ID>-json.log
或者用 truncate -s 0。服务不用停,立刻见效。
第二招:给日志加上轮转
清理完只是续命,日志还会继续涨。在 daemon.json 里给所有容器设个上限:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
改完重启 docker 生效。已有的容器不受影响——需要 recreate 才会用上新配置。也可以在 docker-compose.yml 里按服务单独配:
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
第三招:从源头少打日志
轮转是兜底,日志量本身也值得管:
- 把应用日志级别从 debug 调到 info/warn,开发环境的啰嗦日志别带到线上。
- 健康检查、定时任务的周期性输出最容易被忽视,一个每 5 秒打一行的探针,一天就是 17000+ 行。
- 真正的业务日志走集中式收集(比如 Loki、ELK),容器本地只留最近几天的排错用量。
验证与排错
- 配完后用 docker inspect <容器> | grep -A5 LogConfig 确认生效。
- 日志突然不写了?先看是不是 max-size 设得太小导致高频轮转丢日志——排错期间可以临时调大。
- 别把日志驱动换成 none 来"省事",出问题时没有现场日志会哭。
小结:先截断止血,再用 max-size/max-file 设上限,最后从日志级别和采集架构上治本。三步做完,磁盘半夜被日志打满这种事故基本可以告别。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)