1. 调整Apache日志级别
通过降低日志详细程度,减少不必要的日志记录。编辑Apache主配置文件(/etc/httpd/conf/httpd.conf或/etc/apache2/apache2.conf),找到LogLevel指令,将其从默认的info调整为warn、error或crit(级别越高,记录的信息越少)。例如:
LogLevel warn
修改后需重启Apache服务使配置生效:sudo systemctl restart httpd。
2. 配置日志轮转(核心手段)
使用CentOS自带的logrotate工具定期切割、压缩日志文件,防止单个日志文件过大。编辑Apache的日志轮转配置文件(/etc/logrotate.d/httpd),添加或修改以下参数:
/var/log/httpd/*.log {
daily # 每天轮转(可选weekly/monthly)
rotate 14 # 保留最近14天的日志(根据需求调整)
compress # 压缩旧日志(节省空间)
delaycompress # 延迟压缩(如第15天压缩第1天的日志,避免频繁操作)
missingok # 日志文件丢失时不报错
notifempty # 日志为空时不轮转
create 640 root adm # 创建新日志文件并设置权限(所有者root,组adm)
}
测试配置是否正确:sudo logrotate -f /etc/logrotate.d/httpd(强制立即轮转);logrotate通常通过cron.daily每日自动运行。
3. 禁用不必要的模块日志
Apache的某些模块(如mod_usertrack、mod_status)会生成额外日志,若无需这些日志,可禁用对应模块以减少日志量。编辑配置文件,注释掉不需要的LoadModule指令,例如:
# LoadModule usertrack_module modules/mod_usertrack.so
修改后重启Apache服务:sudo systemctl restart httpd。
4. 使用自定义日志格式
默认的combined或common日志格式可能包含冗余信息(如完整的HTTP头),可通过自定义格式仅记录必要字段(如客户端IP、请求方法、URL、状态码)。编辑配置文件,添加自定义格式并应用:
LogFormat "%h %l %u %t \"%r\" %>s %b" custom_log # 仅记录IP、用户、时间、请求、状态码、发送字节数
CustomLog /var/log/httpd/access_log custom_log # 应用自定义格式到访问日志
此方式可显著减少日志文件大小。
5. 启用异步日志记录(Apache 2.4+)
对于高并发场景,同步日志记录会阻塞请求处理,影响性能。Apache 2.4及以上版本支持异步日志,通过mod_log_config模块的buffer指令实现。编辑配置文件,添加:
LogLevel alert rewrite:trace3 # 示例:开启异步日志(需配合mod_log_config)
异步日志将日志写入内存缓冲区,再由后台进程写入磁盘,减少I/O开销。
6. 优化日志存储路径与介质
将日志文件存储在性能较好的磁盘(如SSD)上,提升写入效率;若日志量极大,可考虑使用网络文件系统(如NFS)集中存储,便于统一管理和备份。
7. 定期清理过期日志
除logrotate自动清理外,可设置cron定时任务定期删除超期日志。例如,创建/etc/cron.weekly/clean_old_logs脚本:
#!/bin/bash
find /var/log/httpd -name "*.gz" -mtime +30 -exec rm -f {} \; # 删除30天前的压缩日志
赋予执行权限:chmod +x /etc/cron.weekly/clean_old_logs,系统每周会自动执行。
8. 监控日志增长与磁盘空间
使用工具(如top、htop、iostat)实时监控Apache进程的日志写入速度和磁盘空间使用情况;设置报警阈值(如日志文件超过10GB或磁盘空间剩余10%时触发报警),及时处理异常。