删除Docker容器后如何保留日志文件?有没有无丢失的容器日志采集方案?
Docker容器删除后日志保留及全量无丢失采集方案
删除容器时保留原有日志的操作方法
- 手动备份默认日志文件
Docker默认使用json-file日志驱动时,容器日志默认存储路径为/var/lib/docker/containers/<容器ID>/<容器ID>-json.log,删除容器前先将对应日志文件复制到宿主机其他持久化目录即可留存。 - 启动容器时绑定挂载日志目录
启动容器时添加挂载参数-v 宿主机持久化目录:/var/lib/docker/containers,所有容器日志会直接写入宿主机指定目录,删除容器时不会同步删除宿主机上的日志文件。如果业务应用会主动输出日志到容器内指定路径,也可以单独挂载该路径到宿主机做持久化。
全量无丢失容器日志采集方案
- 更换持久化日志驱动
修改Docker全局日志驱动为syslog或journald,日志会直接输出到宿主机的系统日志服务中,这类服务自带持久化和轮转能力,删除容器不会影响已经写入系统日志的内容。
全局配置方法:编辑/etc/docker/daemon.json添加如下配置,修改完成后执行systemctl restart docker生效
{ "log-driver": "syslog", "log-opts": { "syslog-address": "unix:///dev/log", "tag": "{{.Name}}" } }
也可以在单容器启动时添加--log-driver参数单独配置日志驱动,不影响全局设置。
- 宿主机部署实时采集Agent
在每台宿主机部署Filebeat、Fluentd等日志采集Agent,监听Docker默认日志存储目录,实时增量采集所有容器的日志并上报到集中日志中心(如Elasticsearch、ClickHouse)。日志产生后秒级就会被采集走,服务更新删除容器的动作不会影响已采集的日志,可实现全量无丢失采集。 - Sidecar采集模式
在容器编排场景(如Kubernetes)下,可为每个业务容器搭配一个日志采集Sidecar容器,共享业务容器的日志目录,实时采集日志后上报到后端存储,该方案可精准控制采集的日志范围,不会受容器生命周期影响。
注意:所有方案都建议提前配置日志轮转策略,避免日志占满磁盘空间。默认
json-file驱动可在daemon.json的log-opts中添加"max-size": "100m", "max-file": "3"参数,限制单个容器的日志大小和留存数量。
内容的提问来源于stack exchange,提问作者Lin Lee
相关产品推荐
相关产品推荐

