docker容器日志过大怎么办
参考文章:Docker容器日志查看与清理(亲测有效)shell脚本#!/bin/sh# vim:sw=4:ts=4:et<<INFOAUTHOR:运维@小兵DATE:2021-10-21DESCRIBE:清理容器日志SYSTEM:CentOS 7.6.1810WARNING:警告信息MODIFY:INFOset -eDOCKER_STORAGE_PATH="/var/lib/docke
参考文章:
Docker容器日志查看与清理(亲测有效)
Docker - 清理Docker占用的磁盘空间
一、清理前台日志
也就是容器stdout标准输出的日志,通过docker logs -f 容器名可以查看的日志。
默认会保存到/var/lib/docker/containers/容器ID/容器ID-json.log
下
通过如下命令可以查看所有容器日志的大小
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
ls -lh $log
done
方法一:定时去清理日志文件
vim clear_docker_log.sh
#!/bin/sh
# vim:sw=4:ts=4:et
<<INFO
AUTHOR:运维@小兵
DATE:2021-10-21
DESCRIBE:清理容器日志
SYSTEM:CentOS 7.6.1810
WARNING:警告信息
MODIFY:
INFO
set -e
DOCKER_STORAGE_PATH="/var/lib/docker"
echo "INFO:======== start clean docker containers logs ========"
logs_file=$(find ${DOCKER_STORAGE_PATH}/containers/ -name *-json.log) #容器日志文件
for log_name in ${logs_file}
do
echo "INFO:clean logs : ${log_name}"
> ${log_name}
done
echo "INFO:======== end clean docker containers logs ========"
方法二:设置docker日志保留策略
vim /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "50m", #日志文件大小不超过50M
"max-file":"3" #最多保留3个日志文件
}
}
解释:
"max-size": "50m" #日志文件大小不超过50M
"max-file":"3" #最多保留3个日志文件
systemctl restart docker
查看容器日志策略:
docker inspect -f '{{.HostConfig.LogConfig}}' 容器名
二、清理后台日志
也就是应用程序自身产生的日志。
docker inspect a3ffabed23a0 | grep ‘“MergedDir”:’
这个路径对应了容器里面的根路径
这里面的数据只有在容器重建之后才会清除,如果日志文件没有定时处理,也没有落盘,容器也没有重建,那么日志会越来越大,极大占用磁盘空间。
如果是k8s集群,会导致node节点有磁盘压力,从而导致上面的pod被Evicted (驱逐)
方法一:日志落盘
可以挂载网络存储做持久化
方法二:日志切割、转储
可以通过shell脚本或者logrotate工具
logrotate实现日志切割(转储)
方法三:应用日志不写入到日志文件log.out,只输出到标准输出
把启动日志放入后台,读取target下面的日志输出到stdout
java -Xbootclasspath/a:./config/ $JAVA_OPT -jar app.jar --server.port=${SERVICE_PORT} > /dev/null 2>&1 &
sleep 5
tail -f ${WORKDIR}/target/logs/*.log
更多推荐
所有评论(0)