1. 调整日志级别
通过降低日志详细程度减少日志文件大小。编辑Apache主配置文件(/etc/httpd/conf/httpd.conf或/etc/apache2/apache2.conf),找到LogLevel指令,将其从默认的info调整为warn或error(warn记录警告及以上级别日志,error仅记录错误日志)。修改后重启Apache服务使配置生效:sudo systemctl restart httpd。
2. 启用日志轮转(Log Rotation)
使用CentOS自带的logrotate工具自动管理日志文件,避免单个日志文件过大。编辑/etc/logrotate.d/httpd文件,添加或修改以下配置:
/var/log/httpd/*.log {
daily # 每天轮转一次
missingok # 若日志文件不存在也不报错
rotate 7 # 保留最近7天的日志
compress # 对旧日志进行gzip压缩
notifempty # 若日志为空则不轮转
create 640 root adm # 创建新日志文件时设置权限和所有者
}
该配置可自动清理过期日志,节省磁盘空间。
3. 禁用不必要的模块
禁用未使用的Apache模块,减少不必要的日志记录和系统资源消耗。编辑/etc/httpd/conf/httpd.conf文件,注释掉不需要的模块加载指令(如mod_usertrack、mod_autoindex等),示例如下:
# LoadModule usertrack_module modules/mod_usertrack.so
# LoadModule autoindex_module modules/mod_autoindex.so
注释后重启Apache服务:sudo systemctl restart httpd。
4. 使用自定义日志格式
仅记录必要的日志信息,减少日志冗余。编辑Apache配置文件,使用LogFormat指令定义简洁的格式(如common格式),并在CustomLog指令中引用:
LogFormat "%h %l %u %t \"%r\" %>s %b" common # 仅记录客户端IP、请求时间、方法、URL、状态码和响应大小
CustomLog /var/log/httpd/access_log common
避免使用combined格式(包含Referer和User-Agent等额外信息),降低日志体积。
5. 采用异步日志记录
通过异步方式写入日志,减少对主线程的影响,提升Apache性能。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 # 按天异步轮转访问日志
86400表示日志文件每86400秒(1天)轮转一次。
6. 优化日志存储路径
将日志文件存储在高性能磁盘(如SSD)上,提升日志写入和读取速度。若系统有多个磁盘分区,可将日志目录挂载到SSD分区(如/mnt/ssd/logs),修改Apache配置中的CustomLog和ErrorLog指令路径即可:
CustomLog /mnt/ssd/logs/access_log combined
ErrorLog /mnt/ssd/logs/error_log
此方法可显著减少日志写入延迟。
7. 监控与定期清理
定期检查日志文件大小和数量,避免意外占用大量磁盘空间。可使用du和ls命令手动查看:
du -sh /var/log/httpd/*.log # 查看日志文件大小
ls -lh /var/log/httpd/*.log # 查看日志文件详细信息
或设置cron定时任务,每天凌晨自动清理7天前的日志(保存为/root/dellog.sh并赋予执行权限):
#!/bin/bash
find /var/log/httpd/ -mtime +7 -name "*.log" -exec rm -rf {} \;
添加cron任务:00 03 * * * /root/dellog.sh(每天凌晨3点执行)。