0
点赞
收藏
分享

微信扫一扫

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

docker容器日志过大怎么办_docker

​方法一:定时去清理日志文件​

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个日志文件
}
}

systemctl restart docker

查看容器日志策略:

docker inspect -f '{{.HostConfig.LogConfig}}' 容器名

二、清理后台日志

也就是应用程序自身产生的日志。

docker inspect a3ffabed23a0 | grep ‘“MergedDir”:’
docker容器日志过大怎么办_日志文件_02
这个路径对应了容器里面的根路径
docker容器日志过大怎么办_shell_03
docker容器日志过大怎么办_docker_04
这里面的数据只有在容器重建之后才会清除,如果日志文件没有定时处理,也没有落盘,容器也没有重建,那么日志会越来越大,极大占用磁盘空间。
如果是k8s集群,会导致node节点有磁盘压力,从而导致上面的pod被​​​Evicted (驱逐)​​​docker容器日志过大怎么办_shell_05

​方法一:日志落盘​

可以挂载网络存储做持久化

​方法二:日志切割、转储​

可以通过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 条评论