温馨提示×

Linux服务器日志轮转策略有哪些

小樊
45
2025-11-23 14:33:02
栏目: 云计算

Linux服务器日志轮转策略全览

一 核心策略维度

  • 按时间轮转:使用daily/weekly/monthly/yearly设定固定周期,便于按天/周/月做归档与审计。
  • 按大小轮转:使用size 10M/100M/1G在日志达到阈值立即切割,适合突发流量或大文件场景。
  • 时间与大小组合:如daily + size 50M,任一条件先到即触发,兼顾时效与容量。
  • 保留与老化:用rotate N控制保留份数;用maxage D按天数清理旧文件,二者可配合实现“数量+时间”双重约束。
  • 命名与归档:用dateext生成日期后缀(如 messages-20251123),配合dateformat自定义格式;用olddir /path将历史日志迁至专用目录(需与当前日志同文件系统)。
  • 压缩与延迟压缩:compress节省空间;delaycompress常用于保留最近一份未压缩日志以便快速排查。
  • 文件创建与权限:用create 0644 root adm在轮转后重建日志并设置权限/属主/属组。
  • 空文件与缺失处理:notifempty避免空文件切割;missingok在日志缺失时不报错。
  • 执行控制与钩子:sharedscripts让多文件共享一次脚本;prerotate/postrotate/endscript在轮转前后执行自定义命令(如通知服务重开日志)。
  • 运行方式:logrotate不是常驻守护进程,通常由**/etc/cron.daily/logrotate**每日触发,也可自定义Cron或手动执行。

二 常用策略模板与适用场景

场景 推荐策略 关键指令示例
系统日志(如 rsyslog/syslog) 高频写入、需稳定归档 daily + rotate 7 + compress + delaycompress + missingok + notifempty + create 0640 root syslog + postrotate 重载 rsyslog
Nginx/高并发访问日志 大流量、按天或达阈值即切 daily + rotate 7–30 + compress + delaycompress + missingok + notifempty + create 0640 nginx adm + dateext + postrotate “nginx -s reload”
数据库慢查询/错误日志 文件可能较大、需及时释放空间 daily + size 100M + rotate 10 + compress + missingok + create 0640 mysql adm + postrotate 通知/重启相关进程
安全审计/合规归档 严格保留周期、便于检索 monthly + rotate 12 + maxage 365 + compress + dateext + create 0600 root root
无法发送信号的老旧服务 不能reopen时安全截断 daily + rotate 7 + copytruncate + missingok + notifempty + create 0644 app app
说明:上述模板中的指令均为logrotate关键字,可按实际路径、用户与保留策略微调。

三 关键配置指令速查

  • 周期与触发:daily/weekly/monthly/yearlysize 50M;可组合触发。
  • 保留与老化:rotate Nmaxage D(按天清理)。
  • 压缩与命名:compressdelaycompressdateextdateformat -%Y%m%d-%s
  • 文件与权限:create mode owner groupcopytruncate(复制后截断,存在极小数据丢失风险);olddir dir
  • 容错与空文件:missingoknotifempty
  • 执行与钩子:sharedscriptsprerotate/endscriptpostrotate/endscriptsu user group切换执行身份。

四 实施与运维要点

  • 配置落地:在**/etc/logrotate.conf定义全局默认,在/etc/logrotate.d/**为各应用拆分配置;修改后无需重启系统服务。
  • 触发机制:默认由**/etc/cron.daily/logrotate**每日运行;也可自定义Cron或手动执行以满足更高频需求。
  • 测试与排错:用logrotate -d进行干跑调试、-f强制执行、-v查看详细过程;检查**/var/lib/logrotate/status**了解最近轮转状态。
  • 服务重开:优先使用“create + postrotate 发送HUP/reload”让应用重开日志句柄;若应用不支持,再考虑copytruncate
  • 常见问题:权限/属主错误、SELinux策略限制、路径不匹配、脚本执行失败等,均可通过调试模式、状态文件与系统日志定位。

0