logrotate 定期清理 Docker 日志

使用 logrotate 工具来定期清理 Docker 容器的日志是一个很好的方法。下面是如何设置 logrotate 来每周清理一次 Docker 日志的示例:

1. 安装 logrotate(如果尚未安装):

sudo yum update
sudo yum install logrotate

2. 创建一个 logrotate 配置文件,比如 /etc/logrotate.d/docker-logs

sudo vi /etc/logrotate.d/docker-logs

3. 在配置文件中添加以下内容来定义 Docker 容器日志的清理规则。下面的示例将每周清理一次日志,保留最近 4 周的日志文件。

/var/lib/docker/containers/*/*.log {
    weekly
    rotate 4
    missingok
    notifempty
    compress
    delaycompress
    copytruncate
}

在上面的配置中,你需要将 /var/lib/docker/containers/*/*.log 替换为你实际的 Docker 容器日志路径。这个配置会执行以下操作:

  • weekly:每周运行一次日志轮转。
  • rotate 4:保留最近的 4 个旧日志文件。
  • missingok:如果日志文件不存在,则继续处理下一个。
  • notifempty:如果日志文件为空,则不轮转。
  • compress:压缩旧日志文件。
  • delaycompress:在下一次轮转之前延迟压缩。
  • copytruncate:复制并截断原始日志文件,以便在轮转时不影响正在写入的进程。

4. 保存配置文件并退出编辑器。

5. 运行以下命令来测试 logrotate 是否按预期工作:

sudo logrotate -d /etc/logrotate.conf

这将显示 logrotate 运行的详细日志,以供你检查是否正确。

  1. 添加一个定时任务,让 logrotate 每天运行一次,来处理所有配置文件:
sudo vi /etc/cron.daily/logrotate

在打开的文件中,确保包含以下内容:

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
  1. 保存文件并退出编辑器。

现在,logrotate 将每周定期清理 Docker 容器的日志,保留最近 4 周的日志文件。确保根据你的实际情况和需求进行适当的配置。

Contributors: masecho