背景说明
高效的监控和日志管理对保持生产系统持续稳定的运行以及排查问题至关重要,默认配置下的docker日志功能。对于一个运行的容器,docker会将日志发送到容器的标准输出设备STDOUT和标准错误设备(STDERR),stdout和stderr实际上就是容器的控制台终端。实际上,docker提供了多种日志机制帮助用户从运行的容器中提取日志信息,这些机制被称作logging driver
解决方案
官网文档
https://docs.docker.com/config/containers/logging/configure/
默认驱动
Docker默认logging driver是json-file
[root@vm1 ~]# docker info | grep 'Logging Driver'
Logging Driver: json-file
[root@vm1 ~]#
如果容器在启动时没有特别指明,就会使用这个默认的logging driver json-file会将容器的日志保存在json文件中,docker负责格式化其内容并输出到stdout和stderr。我们可以在host的容器目录中找到这个文件,容器路径为: docker inspect f4f4a00cc786 —format=’{{.LogPath}}’
其他驱动
none是禁用容器的日志功能 syslog、journald是Linux上的日志管理服务 awslogs、splunk、gcplogs是第三方日志托管服务 gelf和fulentd是两种开源的日志管理方案
运行指定
容器启动时可以通过 —log-driver指定使用logging driver 。
docker run --log-driver none -p 80:80 --name test nginx
也可以手动指定日志大小配置
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
ExecStart=/usr/bin/dockerd -H fd:// --log-driver=none
配置文件
编辑配置文件/etc/docker/daemon.json
{
"log-driver":"json-file"
}