Linux 日志 logrotate配置

一、核心功能与工作原理

1. 核心功能
日志轮转:自动将当前日志文件重命名归档,并创建新的空日志文件继续写入
压缩存储:采用 gzip 压缩算法减少归档日志的存储空间占用
过期清理:根据配置自动删除超过保留期限的旧日志文件

2. 工作原理

状态追踪:在 /var/lib/logrotate/status 记录每个配置最后执行的日期,避免重复轮转
条件判断:检查日志文件是否满足轮转条件(按日期、大小或自定义条件)

执行流程:
  当前日志文件(如 access.log)重命名为 access.log.1
  如有必要,将 .1 移为 .2,以此类推
  超过 rotate 数量的文件被删除
  创建新的空日志文件
  执行 postrotate 中的命令,通知服务重新打开日志

二、配置体系与常用参数

配置结构

1.主配置文件:/etc/logrotate.conf(定义全局参数)
2.子目录配置:/etc/logrotate.d/(存放服务级独立配置文件)
模块化管理:支持为不同应用创建专属配置文件,便于维护

常用配置参数

轮转周期:
  daily:每日轮转
  weekly:每周日轮转
  monthly:每月首日轮转
  yearly:每年首日轮转
  size:当日志文件达到指定大小时触发轮转(如 size 100M)

保留策略:
  rotate N:保留最近 N 个归档日志(如 rotate 7 保留 7 个)
  dateext:使用日期作为轮转后的文件后缀(如 access.log-20250424)
  dateformat .%Y%m%d%s  设置日期后缀格式 年月日+时间戳,没有时分秒


压缩选项:
  compress:启用压缩(默认使用 gzip)
  delaycompress:延迟压缩,避免压缩当前正在写入的日志

其他关键参数:
  missingok:日志文件不存在时不报错
  notifempty:日志为空时不进行轮转
  create 640 user group:创建新日志文件并设置权限和属主
  sharedscripts:所有日志处理完后只执行一次 postrotate 脚本,脚本通过endscript结束
配置示例

在/etc/logrotate.d/文件夹下面创建一个配置文件,这个文件配置路径指向你需要处理的路径

/var/log/nginx/*.log {
  daily
  rotate 7
  compress
  delaycompress
  missingok
  notifempty
  create 0644 nginx nginx    # 0是特殊权限位,此处为 0表示无特殊权限,644 读4+写2=6
  sharedscripts
  postrotate    # 开始
    if [ -f /var/run/nginx.pid ]; then
      kill -USR1 $(cat /var/run/nginx.pid)
    fi
  endscript   # 结束
}

#为什么要执行:kill -USR1 $(cat /var/run/nginx.pid)
 #因为logrotate 是在原来的日志文件修改名称,然后在创建一个新的文件,但是实际已经启动的服务如nginx,
 #本身就已经指向了之前的日志文件,后面需要让他写入到新创建的文件,通过-USR1发送信号

此配置表示:Nginx 日志每日轮转,保留最近 7 个归档,启用压缩但延迟一天,日志文件不存在时不报错,轮转后通知 Nginx 重新打开日志文件

三、使用场景与重要性

解决的问题
磁盘空间管理:日志文件可能会迅速增长,占用大量磁盘空间
日志分析效率:通过分割日志文件,更方便进行日志分析(如分析特定时间段的问题)
系统性能优化:大型日志文件可能影响系统性能,定期轮转可提高系统性能
故障排查:避免因日志文件过大导致磁盘写满,造成服务中断

典型应用场景
Web 服务器:管理 Nginx、Apache 的访问日志和错误日志
数据库系统:处理 MySQL、PostgreSQL 等数据库的错误日志
应用服务:管理自定义应用的日志输出
系统日志:处理 /var/log/messages、/var/log/syslog 等系统日志

四、常用操作命令

配置验证

调试模式:logrotate -d /etc/logrotate.d/nginx   --你的配置文件
  模拟执行配置,不实际轮转,用于检查配置语法和预期行为

手动执行
强制轮转:logrotate -vf /etc/logrotate.d/nginx --你的配置文件
  -v 显示详细过程,-f 强制执行,即使未到轮转周期也会触发

状态查看
上次执行时间:cat /var/lib/logrotate/status  
  查看日志轮转的最后执行日期

五、最佳实践建议

配置验证:修改配置后务必使用 logrotate -d 验证,避免配置错误导致轮转失败
权限设置:确保 create 指令指定正确的用户和组,避免服务无法写入新日志文件
保留策略:根据磁盘空间和日志重要性合理设置 rotate 数值,避免日志丢失或磁盘耗尽
监控告警:配置磁盘使用率监控,及时发现日志管理问题
信号选择:不同服务需要不同的信号,如 Nginx 用 kill -USR1,rsyslog 用 kill -HUP

# 常见信号编号:
sudo kill -HUP     # 重载配置
sudo kill -USR1    # 重开日志
sudo kill -USR2    # 热升级
sudo kill -QUIT    # 优雅关闭
sudo kill -TERM    # 快速关闭
sudo kill -9       # 强制关闭(最后手段)
posted @ 2026-04-22 20:51  沙漠的一只雕  阅读(24)  评论(0)    收藏  举报