2026-10-30 17:49:22
Linux日志轮转与管理通过logrotate工具实现,其核心配置文件为/etc/logrotate.conf和/etc/logrotate.d/目录下的独立文件,通过设置轮转周期、压缩策略、保留份数等参数,可有效防止日志膨胀并支持安全审计。
一、logrotate的核心配置与参数说明主配置文件与独立配置文件
/etc/logrotate.conf:定义全局默认参数(如轮转周期weekly、保留份数rotate 4、压缩compress)。
/etc/logrotate.d/:存放各应用或服务的独立配置文件,实现精细化管理。

典型配置示例
/var/log/myapp/*.log { daily # 每日轮转 rotate 7 # 保留7份旧日志 compress # 启用压缩(gzip格式) delaycompress # 延迟压缩(下次轮转时压缩前一次日志) missingok # 日志不存在时不报错 notifempty # 空日志不轮转 create 0640 root adm # 新日志权限640,所有者root,组adm sharedscripts # 多个日志匹配时脚本仅执行一次 postrotate /usr/bin/systemctl reload myapp.service > /dev/null 2>&1 || true endscript}关键参数解析
轮转触发条件:
daily/weekly/monthly:按时间周期轮转。
size 100M:日志文件达到100MB时轮转。
压缩与归档:
compress:启用压缩(默认gzip)。
delaycompress:延迟压缩,避免影响实时分析工具。
olddir /var/log/archive:将旧日志归档至指定目录。
文件管理:
create:指定新日志的权限、所有者及组。
missingok/notifempty:忽略缺失或空日志文件。
脚本执行:
postrotate/prerotate:轮转前后执行脚本(如重启服务、重载配置)。
高频大流量日志(如Web访问日志)
配置建议:
轮转周期:daily或size 100M。
启用compress和delaycompress,平衡存储与实时分析需求。
使用olddir归档旧日志,保持主目录整洁。
示例:/var/log/nginx/access.log { size 100M rotate 10 compress delaycompress olddir /var/log/nginx/archive}
关键服务日志(如系统认证日志)
配置重点:
严格设置create权限,确保服务可写入新日志。
postrotate脚本需精确通知服务重载日志(如systemctl reload)。
避免使用copytruncate(可能丢失少量日志),优先通过服务自身机制切换日志。
示例:/var/log/auth.log { weekly rotate 6 create 0600 root adm postrotate /usr/lib/rsyslog/rsyslog-rotate endscript}
低优先级日志(如调试日志)
配置优化:
轮转周期:monthly,保留更多份数(如rotate 12)。
可选择性关闭压缩以简化管理。
示例:/var/log/debug.log { monthly rotate 12 missingok}
模块化管理
将不同应用的配置拆分至/etc/logrotate.d/下的独立文件(如nginx、mysql)。
添加详细注释说明配置用途及注意事项。

权限问题
现象:日志未轮转或服务无法写入新日志。
排查步骤:
检查日志文件权限:ls -l /var/log/myapp/*.log。
确认服务运行用户:ps aux | grep myapp。
修正create参数(如create 0640 myapp adm)。
postrotate脚本执行失败
现象:脚本报错导致服务未收到信号,日志持续写入旧文件。
排查步骤:
手动执行脚本命令测试:/usr/bin/systemctl reload myapp.service。
检查脚本输出重定向:确保使用> /dev/null 2>&1避免阻塞。
SELinux限制
现象:权限正确但操作被阻止。
排查步骤:
查看审计日志:ausearch -c logrotate。
临时放宽策略:setenforce 0(测试后恢复)。
生成自定义策略:audit2allow -a -M mypolicy && semodule -i mypolicy.pp。
日志路径不匹配
现象:调试模式显示未找到日志文件。
排查步骤:
使用调试模式模拟执行:logrotate -d /etc/logrotate.d/myapp。
检查通配符是否覆盖所有目标文件(如/var/log/myapp/*.log)。
状态文件与cron任务检查
关键文件:/var/lib/logrotate/status(记录上次轮转时间)。
定时任务:确认/etc/cron.daily/logrotate存在且可执行。

logrotate通过灵活的配置参数和模块化设计,可满足不同场景的日志管理需求。高效配置需结合应用特性调整轮转周期、压缩策略及权限设置,同时通过调试模式、状态文件和日志检查快速定位问题。避免权限错误、脚本失败等常见误区,可确保日志轮转稳定运行,保障系统长期健壮性。