「Docker」- 日志驱动(Logging Driver) @20210414
日志驱动(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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架