记一次docker日志磁盘告警问题
前景
今日,我正在开开心心的刷着JFX的Coding中,突然线上报警群中爆了个炸弹,EC2磁盘超过80%。
处理过程
解决问题姿势就位:
赶紧开机 ==》 ❤️中万匹🦙奔腾而过 ❤️中MMP
默默的通过跳板机进入目标机器
不管三七二十一,执行查看磁盘占用大小,我的乖乖,占用确实超过了87%了,一下子暴涨的
# 查看磁盘占用大小
> sudo df -h
# 查看当前目录总量
> sudo du -sh
- 开始定位具体哪个文件或者目录占用这么大,跑到根目录下。
# 查看当前目录下一级子文件和子目录占用的磁盘容量
> sudo du -lh --max-depth=1
- 一开始猜想可能是docker容器的日志占用大,上面执行后,还真 TM 是
/var/lib/docker/containers 目录占用 42G
- 开始查看是哪个容器占用的这么大的空间
# 查看 containers 日志目录排序
> sudo du -d1 -h /var/lib/docker/containers | sort -h
# 查看具体的哪个日志文件大
> sudo find /var/lib/docker/containers -name *.log
当然这个配图是我清理之后的
- 定位到最大的文件,一顿操作
# 清空比较大的日志文件
> sudo sh -c "cat /dev/null > ${log_file}"
思考
- 上面的方式是一种方式解决【临时】如何彻底解决这个问题:
# 查看 docker 的 Logging Driver > docker info | grep 'Logging Driver'
- 写个
shell脚本
使用crontab
定期执行清理#!/bin/sh echo "======== start clean docker containers logs ========" logs=$(find /var/lib/docker/containers/ -name *-json.log) for log in $logs do echo "clean logs : $log" cat /dev/null > $log done echo "======== end clean docker containers logs ========"
- 假如是
docker run
创建容器的,指定--log-opt max-size=${MAX_SIZE}m --log-opt max-file=${NUMBER}
docker-compose
方式更高docker-compose.yaml
文件logging: driver: "json-file" options: max-size: "${MAX_SIZE}m" max-file: ${NUMBER}
docker
全局修改/etc/docker/daemon.json
{ "log-driver": "json-file", "log-opts": { "max-size": "${MAX_SIZE}m" } }
> systemctl daemon-reload > systemctl restart docker
- 写个
- 为什么会瞬间💥式的增长 ???