温馨提示×

Linux日志轮转策略有哪些

小樊
65
2025-09-24 00:16:20
栏目: 智能运维

Linux日志轮转策略主要通过logrotate工具实现,其核心策略涵盖轮转触发条件、保留规则、压缩优化、特殊场景处理等多个维度,以下是具体分类及说明:

1. 按时间触发的轮转策略

根据固定时间间隔自动轮转日志,是最常见的基础策略:

  • daily:每天轮转一次(如系统日志/var/log/syslog),通常配合weekly/monthly使用,优先级低于size(若同时配置size,达到大小立即触发)。
  • weekly:每周轮转一次(默认策略,如/var/log/dpkg.log),系统多在周一执行。
  • monthly:每月轮转一次(如/var/log/wtmp用户登录日志),通常在每月第一天执行。
  • yearly:每年轮转一次(较少用,如归档类日志),需手动配置时间点。

2. 按大小触发的轮转策略

当日志文件达到指定阈值时立即轮转,适用于日志增长较快的场景(如应用日志):

  • size:支持size 100K(100KB)、size 10M(10MB)、size 5G(5GB)等格式,单位可组合(如size 100ksize 100M)。例如,Nginx日志配置size 50M表示当日志文件超过50MB时轮转。

3. 保留策略

控制旧日志的保留数量或时长,避免磁盘空间耗尽:

  • rotate N:保留最近N个轮转日志(如rotate 7保留7天日志),超出部分自动删除(默认保留4个,可通过/etc/logrotate.conf全局设置)。
  • maxage N:删除超过N天的旧日志(如maxage 30删除30天前的日志),可与rotate配合使用(如保留最近7天日志+删除30天前的旧日志)。

4. 压缩与存储优化策略

减少旧日志占用的磁盘空间,提升存储效率:

  • compress:使用gzip默认压缩旧日志(如app.log.1.gz),压缩后文件大小约为原文件的1/3~1/10。
  • delaycompress:延迟压缩,当前轮转的日志(如app.log.1)不下压缩,待下次轮转时再压缩(如app.log.2.gz),避免影响实时写入。
  • nocompress:禁用压缩(如日志需快速查看时),默认关闭。
  • olddir DIR:将旧日志移动到指定目录(如olddir /var/log/archive),便于集中管理。

5. 特殊场景处理策略

应对无法重启服务、空日志、文件丢失等特殊情况:

  • copytruncate:复制日志内容到备份文件(如app.log.1),然后清空原文件(app.log)。适用于无法重启的服务(如Nginx、MySQL),但可能存在少量日志丢失风险(复制与清空之间的时间差)。
  • missingok:日志文件不存在时不报错,继续处理下一个日志文件(如服务未启动时),避免轮转失败。
  • notifempty:日志文件为空时不轮转(默认行为),避免生成无意义的空日志文件(如notifempty)。
  • ifempty:即使日志文件为空也轮转(与notifempty相反),适用于需要保留空日志的场景(如监控日志完整性)。

6. 脚本控制策略

在轮转前后执行自定义操作,确保服务正常运行:

  • prerotate/endscript:轮转前执行的脚本(如修改文件权限、停止服务),需用endscript结束。例如,MySQL轮转前需刷新日志:/usr/local/mysql/bin/mysqladmin -uroot -p'password' flush-logs
  • postrotate/endscript:轮转后执行的脚本(如重启服务、发送通知),需用endscript结束。例如,Nginx轮转后需通知其重新打开日志文件:/usr/sbin/nginx -s reopen
  • sharedscripts:对一组日志仅执行一次postrotate脚本(如批量重启多个服务),避免重复执行(默认每个日志轮转后都执行一次)。

7. 时间格式策略

自定义轮转后的日志文件名,便于归档和查找:

  • dateext:在日志名中添加日期后缀(如app.log-20250508.gz),替代默认的数字递增(app.log.1),更直观。
  • dateformat FORMAT:配合dateext使用,自定义日期格式(如dateformat -%Y-%m-%d生成app.log-2025-05-08.gzdateformat -%s生成时间戳)。

以上策略可根据实际需求组合使用(如daily+rotate 7+compress+dateext),通过/etc/logrotate.d/目录下的配置文件(如nginxmysql)针对特定服务定制,实现日志的自动化管理。

0