背景说明

高效的监控和日志管理对保持生产系统持续稳定的运行以及排查问题至关重要,默认配置下的docker日志功能。对于一个运行的容器,docker会将日志发送到容器的标准输出设备STDOUT和标准错误设备(STDERR),stdout和stderr实际上就是容器的控制台终端。实际上,docker提供了多种日志机制帮助用户从运行的容器中提取日志信息,这些机制被称作logging driver

解决方案

官网文档

https://docs.docker.com/config/containers/logging/configure/

默认驱动

Docker默认logging driver是json-file

  1. [root@vm1 ~]# docker info | grep 'Logging Driver'
  2. Logging Driver: json-file
  3. [root@vm1 ~]#

如果容器在启动时没有特别指明,就会使用这个默认的logging driver json-file会将容器的日志保存在json文件中,docker负责格式化其内容并输出到stdout和stderr。我们可以在host的容器目录中找到这个文件,容器路径为: docker inspect f4f4a00cc786 —format=’{{.LogPath}}’

其他驱动

image.png

none是禁用容器的日志功能 syslog、journald是Linux上的日志管理服务 awslogs、splunk、gcplogs是第三方日志托管服务 gelf和fulentd是两种开源的日志管理方案

运行指定

容器启动时可以通过 —log-driver指定使用logging driver 。

  1. docker run --log-driver none -p 80:80 --name test nginx

也可以手动指定日志大小配置

  1. docker run -it --log-opt max-size=10m --log-opt max-file=3 alpine ash

默认指定

如果要设置docker默认的logging driver,可以有两种方案

命令参数

修改docker daemon的启动脚本,指定—log-driver参数,编辑配置文件/usr/lib/systemd/system/docker.service

  1. ExecStart=/usr/bin/dockerd -H fd:// --log-driver=none

配置文件

编辑配置文件/etc/docker/daemon.json

  1. {
  2. "log-driver":"json-file"
  3. }