1. 调整日志级别
Apache的LogLevel指令控制日志的详细程度,较低级别(如warn、error)会过滤掉调试、通知等无关信息,显著减少日志文件大小和写入开销。编辑Apache主配置文件(/etc/httpd/conf/httpd.conf或/etc/apache2/apache2.conf),将默认的info调整为warn或error(生产环境推荐error),仅记录关键错误和警告信息。
2. 启用日志轮转(logrotate)
日志轮转可防止日志文件无限增长,避免占用大量磁盘空间。CentOS默认使用logrotate工具,配置文件位于/etc/logrotate.d/httpd。典型配置如下:
/var/log/httpd/*.log {
daily # 每天轮转
missingok # 忽略缺失文件
rotate 14 # 保留14天日志
compress # 压缩旧日志(节省空间)
notifempty # 空日志不轮转
create 640 root adm # 新日志文件权限
}
此配置可自动管理日志生命周期,减少单文件大小和数量。
3. 禁用不必要的模块
不必要的模块会增加Apache的资源消耗,间接影响日志记录性能。编辑配置文件,注释掉未使用的模块(如authn_file、authz_user等),仅保留必需模块(如mod_rewrite、mod_ssl)。重启Apache使配置生效。
4. 使用异步日志记录
Apache 2.4及以上版本支持异步日志记录,通过mod_log_config模块的管道(|)语法将日志输出到rotatelogs工具,避免日志写入阻塞主线程。配置示例如下:
ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/error_log.%Y-%m-%d 86400"
CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log.%Y-%m-%d 86400" combined
此方式将日志写入操作转移到后台,提升Apache处理请求的效率。
5. 优化日志格式
选择简洁的日志格式可减少每条日志的写入数据量。推荐使用combined(包含常用字段,如客户端IP、请求方法、URL、状态码等)或common(仅包含基本请求信息)格式,避免verbose等详细格式。配置示例如下:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog /var/log/httpd/access_log combined
若无需Referer或User-Agent信息,可进一步简化格式(如%h %l %u %t \"%r\" %>s %b)。
6. 优化日志存储
将日志文件存储在高性能磁盘(如SSD)上,可提升日志写入和读取速度。若日志量极大,考虑使用网络文件系统(如NFS)集中存储,便于统一管理和备份,但需注意网络延迟对性能的影响。
7. 监控与定期清理
使用du -sh /var/log/httpd/*.log查看日志文件大小,ls -lh /var/log/httpd/*.log查看详细信息,定期清理旧日志(如超过30天的日志)。可设置cron作业自动清理,例如:
0 0 * * * find /var/log/httpd/ -name "*.log" -mtime +30 -exec rm -f {} \;
此命令每天凌晨删除30天前的日志文件,释放磁盘空间。