如何压缩Linux日志文件 logrotate自动管理配置

如何压缩Linux日志文件 logrotate自动管理配置
最新回答
相爱?算了吧

2026-06-29 15:21:01

logrotate 是 Linux 下用于自动管理日志轮转、压缩和删除的工具,通过配置可实现日志文件的定期处理,避免磁盘空间占用和性能影响。 以下是具体配置方法及关键参数说明:

配置步骤
  1. 定位配置文件

    全局配置文件:/etc/logrotate.conf

    服务专属配置:/etc/logrotate.d/ 目录下(如 Nginx 的配置文件为 /etc/logrotate.d/nginx)。

  2. 编辑服务配置文件以 Nginx 日志为例,创建或修改 /etc/logrotate.d/nginx,内容如下:

/var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate [ -f /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid` endscript}关键参数详解
  • daily每天检查日志是否需要轮转(其他选项:weekly、monthly、按文件大小 size 100M)。

  • rotate 14保留最近 14 份日志(包括当前日志和压缩后的历史日志)。

  • compress启用压缩,默认使用 gzip 算法(压缩后文件扩展名为 .gz)。

  • delaycompress延迟一天压缩,即当前日志轮转后不立即压缩,待下一次轮转时再压缩,避免压缩过程影响日志写入。

  • notifempty仅当日志文件非空时才执行轮转,避免处理空文件浪费资源。

  • create 0640 www-data adm轮转后创建新日志文件,并设置权限为 0640,属主为 www-data,属组为 adm。

  • postrotate ... endscript轮转后执行的命令,例如通知 Nginx 重新加载日志文件(通过发送 USR1 信号)。

常见问题与解决方案
  1. 压缩失败(权限不足)

    原因:logrotate 默认以 root 用户运行,但若日志目录权限不足(如属主为其他用户),会导致压缩失败。

    解决:确保 create 参数中指定的属主/属组对日志目录有写权限,或手动调整目录权限(如 chmod 755 /var/log/nginx)。

  2. 多配置冲突

    原因:多个服务配置中重复定义了相同的日志路径或参数。

    解决:检查 /etc/logrotate.d/ 下所有配置文件,确保无重复路径;使用 include 指令合并通用配置。

  3. 旧日志未清理

    原因:rotate 参数未生效,可能是配置错误或权限问题。

    解决:运行 logrotate -d /etc/logrotate.d/nginx 模拟执行,查看错误信息;检查日志目录是否有足够磁盘空间。

  4. 测试配置

    模拟执行:logrotate -d /etc/logrotate.d/nginx(调试模式,不实际执行)。

    手动触发:logrotate -vf /etc/logrotate.d/nginx(强制执行一次轮转,用于调试)。

适用场景与建议
  • 适合压缩的日志

    体积增长快的服务日志(如 Web 服务器 Nginx/Apache、数据库 MySQL)。

    保留周期较长的日志(如需保留 7 天以上)。

    不常访问的历史日志(压缩后不影响日常查询)。

  • 不建议压缩的日志

    调试中频繁写入的日志(可关闭压缩或启用 delaycompress)。

    实时分析的日志(压缩会引入额外 I/O 开销)。

示例:MySQL 日志配置

若需压缩 MySQL 慢查询日志,可创建 /etc/logrotate.d/mysql-slow,内容如下:

/var/log/mysql/mysql-slow.log { weekly rotate 5 compress missingok notifempty create 640 mysql mysql postrotate /usr/bin/mysql -e "FLUSH SLOW LOGS;" endscript}

参数说明:

  • weekly:每周轮转一次。
  • rotate 5:保留 5 份历史日志。
  • FLUSH SLOW LOGS:轮转后通知 MySQL 重新打开慢查询日志文件。

通过合理配置 logrotate,可显著减少日志占用的磁盘空间,同时降低系统维护成本。