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内容。

另从http://docs.lvrui.io/2017/02/19/%E6%9B%B4%E6%94%B9docker%E7%9A%84%E6%97%A5%E5%BF%97%E5%BC%95%E6%93%8E%E4%B8%BA-journald/

中得知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

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐