如何对docker container 的日志 做 logrotate

本文介绍如何使用logrotate管理Docker容器产生的大量日志,包括配置文件示例及通过设置Docker守护进程参数实现日志轮转的方法。此外还提到了生产环境中配合使用ELK堆栈进行日志收集的方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker container 会产生很多日志,通常的标准日志( /dev/stdout, /dev/stderr),docker 在运行的过程中就会产生很多,它们一般会以如下的方式命名,并写到这些文件里,比如:
/var/lib/docker/containers/[CONTAINER ID]/[CONTAINER_ID]-json.log
所以我们需要开启logrotate功能,否则就等着主机磁盘爆掉了
具体创建 /etc/logrotate.d/docker-container,添加如下配置文件,当然还可以添加其他一些配置,但下面这个已经够了

/var/lib/docker/containers/*/*.log {
    daily
    rotate 7
    copytruncate
    missingok
    compress
    delaycompress
    maxsize 10G
    minsize 1024k
}

这样系统的logrotate服务就会自动对它进行rotate了。

效果大概如下所示:
在这里插入图片描述
但生产环境,开启logrotate的同时,还需要有自己的日志系统,流行的方案是采用EFK( elasticsearch, fluentd, kibana) ,通过配置 fluentd 进行日志采集 docker 容器日志。具体这里不展开了。

另外docker官方也提供了通过配置 docker daemon 的方法来进行日志roate,类似如下:

{
  "storage-driver": "overlay2",
  "graph": "/var/lib/docker",
  "log-driver": "json-file",
  "log-opts": {
        "max-size": "200m",
        "max-file": "7"
  },
  "debug": false,
  "userns-remap": "1000:1000"
} 

其中如下的定义就是限制最大日志文件大小,比如每个限制多大,保留最近日志多少个等。

  "log-opts": {
        "max-size": "200m",
        "max-file": "7"
  },

会自动以日期作为后缀进行命名:
/var/lib/docker/containers/[CONTAINER ID]/[CONTAINER_ID]-json.log-xxyearxxmonthxxday.gz
效果如下,
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值