docker logs日志清除
1.背景在CentOS 上,采用docker-compose 部署容器时,使用docker-compose logs查看容器输出控制台日志。但是由于输出的日志过多,害怕占满空间所以想要手动删除。使用的docker版本为1.13.1。按照网上所说查看日志路径,但返回结果为“”docker inspect --format='{{.LogPath}}' <container_name_or_id
1.背景
在CentOS 上,采用docker-compose 部署容器时,使用docker-compose logs查看容器输出控制台日志。但是由于输出的日志过多,害怕占满空间所以想要手动删除。
使用的docker版本为1.13.1。按照网上所说查看日志路径,但返回结果为“”
docker inspect --format='{{.LogPath}}' <container_name_or_id
使用#docker info命令查看到log-driver为journald,
根据官方https://docs.docker.com/config/containers/logging/journald/提供使用方法
journalctl CONTAINER_NAME container_name可以来查看日志内容,但是仍无法知道日志路径
根据问题https://stackoverflow.com/questions/30969435/where-is-the-docker-daemon-log中回答在/var/log/messages文件中,果然从中找到log内容。
中得知journalld默认日志最大限制为所在文件系统容量的 10%。超出时会自动删除最早的日志。但它会自动发给syslog导致syslog巨大。因此还需要自己配置大小,可以使用如下方法:
2.配置方法
1.在docker-compose.yml中增加logging配置,此时文件路径在/var/lib/docker/containers/{container_id}/*-json.log
nginx:
image: nginx:1.12.1
restart: always
logging:
#日志驱动
driver: “json-file”
options:
#日志大小
max-size: “5g”
#日志数量
max-file: "3"
2.在/etc/docker/daemon.json中增加全局配置
{
"registry-mirrors": ["http://f613ce8f.m.daocloud.io"],
"log-driver":"json-file",
"log-opts": {"max-size":"5g", "max-file":"3"}
}
//重启docker守护进程
#systemctl daemon-reload
#systemctl restart docker
3.设置journal.conf
编辑/etc/systemd/journald.conf
可以精确指定占用的空间大小
SystemMaxUse=50M
另外以下几个非常重要的优化项目
ForwardToSyslog=yes
ForwardToWall=yes
以上两个参数默认都是 yes
意味着 journald 收集日志后还会转发到 syslog 中
由此造成的影响是: journald 虽然可以乖乖的按照上面的配置进行日志的清理, 但是 syslog 却不在 journald 的控制范围之内
在日志量很大的情况下, 我们发现 syslog 中的日志量也变得巨大, 而且里面都是容器的日志, 所以我们需要把上面两个参数的值改为no
禁止🚫journald 收到日志后转发给 syslog
更改完配置文件后, 重启 journald 服务 systemctl restart systemd-journald.service
更多推荐
所有评论(0)