CentOS Apache日志清理最佳实践
logrotate是Linux系统自带的日志管理工具,可自动完成日志分割、压缩、删除及通知服务重新加载,是Apache日志清理的首选方案。配置步骤如下:
/etc/logrotate.d/目录下创建Apache专用配置文件(如apache),内容示例如下:/var/log/httpd/*.log {
daily # 每天轮转一次(可根据需求改为weekly/monthly)
dateext # 使用日期作为轮转文件后缀(如access_log.20251108)
rotate 30 # 保留最近30天的日志(可根据磁盘空间调整)
compress # 压缩旧日志(节省空间)
delaycompress # 延迟压缩上一次轮转的日志(避免压缩当天日志)
missingok # 若日志文件丢失,不报错继续执行
notifempty # 若日志为空,不进行轮转
create 640 root adm # 创建新日志文件,权限640,属主root,属组adm
sharedscripts # 所有日志轮转完成后执行一次postrotate脚本
postrotate
/bin/systemctl reload httpd.service > /dev/null 2>&1 || true # 重新加载Apache,确保日志写入新文件
endscript
}
sudo logrotate -d /etc/logrotate.d/apache测试配置语法是否正确(dry run模式);若需立即执行,可使用sudo logrotate -vf /etc/logrotate.d/apache(强制模式)。/etc/cron.daily/logrotate)每日自动运行,无需额外配置。Apache的日志级别决定了记录的详细程度,降低级别可减少日志文件大小。默认级别为info,可根据需求调整为更高级别:
/etc/httpd/conf/httpd.conf或/etc/apache2/apache2.conf),找到LogLevel指令,将其设置为warn(仅记录警告及以上级别)或error(仅记录错误信息):LogLevel warn
sudo systemctl restart httpd。Apache的模块会增加日志记录的内容(如mod_usertrack记录用户会话跟踪信息),禁用不需要的模块可减少日志量:
LoadModule指令(如LoadModule usertrack_module modules/mod_usertrack.so)。#,例如:# LoadModule usertrack_module modules/mod_usertrack.so
sudo systemctl restart httpd。默认的combined格式会记录大量字段(如Referer、User-Agent),可根据需求自定义格式,仅保留关键信息(如IP、时间、请求方法、状态码、响应大小):
LogFormat指令定义新格式(如custom_format):LogFormat "%h %t \"%r\" %>s %b" custom_format
其中,%h为客户端IP,%t为时间戳,%r为请求首行,%>s为响应状态码,%b为响应大小(字节)。CustomLog指令指定日志文件及格式:CustomLog /var/log/httpd/access_log custom_format
sudo systemctl restart httpd。若需立即释放磁盘空间,可通过以下命令手动删除旧日志:
/tmp目录),再删除原文件:sudo tar -czvf /tmp/apache_logs_backup.tar.gz /var/log/httpd/*.log
sudo rm -f /var/log/httpd/*.log
.log文件(如access_log、error_log):sudo find /var/log/httpd/ -type f -name "*.log" -mtime +30 -exec rm {} \;
注:手动清理后,需确保logrotate配置正确,避免日志再次堆积。root权限(通过sudo执行)。apachectl configtest、logrotate -d),避免服务中断。df -h、du -sh /var/log/httpd/*监控磁盘空间,确保存储充足。