日志驱动(Logging Driver)
在 Docker 中,由多种方式存储应用程序日志,这些存储日志的方式被称为“日志驱动(Logging Driver)”。
它具有多种类型日志驱动,例如 none、local、json-file 等等,还可以实现自己的日志驱动。详细内容可参考官方「Supported logging drivers」与「Use a logging driver plugin」文档。
注意事项
本笔记内容是对官方 19.03/Configure logging drivers 文档的学习与整理,详细内容请参考官方文档。
配置默认日志驱动
默认为 json-file 日志驱动,但是可以修改。
配置全局日志驱动
修改 /etc/docker/daemon.json 配置文件(示例):
{ "log-driver": "syslog", "log-opts": { "max-size": "500m", "max-file": "3", "labels": "production_status", "env": "os,customer" } }
log-opts 可用属性取决于日志驱动类型(log-driver),如果日志驱动支持其他选项,则可以进行添加。
配置容器日志驱动
也可以为特定容器配置日志驱动。在启动容器时,指定 --log-driver 选项:
docker run -it --log-driver none alpine ash
配置日志分发模型
日志分发由两种模型:(1)阻塞;(2)非阻塞
“非阻塞”用于防止日志后端压力而导致应用程序崩溃。详细内容可参考官方文档。
使用日志标签
可以使用-e或--label选项指定日志标签,在生成的日志中会附加某些标签。详细内容可参考官方文档。
日志驱动限制
企业版支持“双重日志”,即不管使用哪种日志驱动,都可以使用 docker logs 命令查看,但是社区版目前(01/08/2020)只支持查看 local、json-file、journald 这三种日志驱动,因此“我们”通常也只需要关注这三中。
读取轮转日志需要消耗磁盘与 CPU 使用
最大日志文件大小由Docker数据目录大小决定
默认日志驱动、配置,以及需要我们关注的问题
服务进程(Dokcer)的日志保存在哪里?
如果使用 systemd 运行 Docker 服务,则日志由 systemd-journald 管理。使用 journalctl -u docker.service 查看 Docker 日志。
默认的日志驱动是什么?
不同版本的 Docker,默认日志驱动不同。根据官方文档 19.03/Configure the default logging driver 所述:The default logging driver is json-file。
执行命令 docker info --format "{{.LoggingDriver}}" 查看当前默认的日志驱动。
执行命令 docker inspect -f '{{.HostConfig.LogConfig.Type}}' <CONTAINER> 查看容器的日志驱动。
容器的日志保存在哪里?
/var/lib/docker/containers/<container_id>/<container_id>-json.log
容器的日志是否会自动轮转,并释放空间?
如果容器使用 json-file 日志驱动,根据官方 19.03/JSON File logging driver 文档对 max-size 的描述,容器的日志不会论转,会一直增长。
通过在 Docker 18.09.1 测试,也是如此,日志文件 <container_id>-json.log 会不断增长,因此我们需要调整日志驱动参数。
相关文章
「Docker」- docker stats
「Docker」- 监控
参考文献
19.03/View logs for a container or service
19.03/Configure logging drivers
19.03/JSON File logging driver
docker logs
Where Are Docker Container Logs Stored?
How to setup log rotation for a Docker container