CentOS Apache日志存储策略
Apache的日志存储路径与格式由配置文件(通常为/etc/httpd/conf/httpd.conf或/etc/apache2/apache2.conf)定义,主要包括两类日志:
/var/log/httpd/access_log;/var/log/httpd/error_log。CustomLog(自定义访问日志)和ErrorLog(自定义错误日志)指令修改存储路径与格式,例如将访问日志保存至/var/log/httpd/custom_access.log。日志轮转是防止日志文件过大导致磁盘空间耗尽的核心策略,CentOS主要通过logrotate工具实现自动化管理。
/etc/logrotate.d/httpd(或apache2),核心参数包括:
daily:每日轮转一次;rotate 7:保留最近7天的日志文件;compress:使用gzip压缩旧日志(减少磁盘占用);notifempty:仅当日志文件非空时轮转;create 640 root adm:轮转后创建新日志文件,权限为640,属主为root、属组为adm;sharedscripts:所有匹配的日志文件轮转完成后,统一执行postrotate脚本;postrotate:通过kill -USR1命令通知Apache重新打开日志文件(避免日志写入中断)。sudo logrotate -f /etc/logrotate.d/httpd强制立即轮转,验证配置正确性;logrotate通常由/etc/cron.daily/logrotate定时任务每日自动执行。通过调整日志级别,可控制日志记录的详细程度,减少不必要的日志输出(如调试信息),从而降低磁盘空间占用。
httpd.conf中的LogLevel指令;warn(默认):记录警告及以上级别的信息(如权限错误、连接超时);error:仅记录错误信息(如配置语法错误、服务无法启动);crit:仅记录严重错误(如系统崩溃、关键模块失效)。error,可减少约50%~70%的日志量(具体取决于应用场景)。Apache 2.4及以上版本支持异步日志记录,通过mod_log_config模块的管道(|)语法实现,将日志写入任务交给后台进程处理,避免阻塞主线程(提升服务器性能)。
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秒)轮转,文件名包含日期(如error_log.2025-10-26);combined格式(包含Referer、User-Agent等信息),同样按天轮转。Apache提供多种预定义日志格式,选择简洁的格式可减少每条日志的记录内容,降低磁盘IO与存储开销:
%h %l %u %t \"%r\" %>s %b),适合常规访问统计;common格式记录访问日志:LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog /var/log/httpd/access_log common
为节省磁盘空间,旧日志文件需进行压缩存储。logrotate的compress参数可自动调用gzip压缩(生成.gz文件),delaycompress参数可延迟一天压缩(避免压缩当天仍在写入的日志)。
/var/log/httpd/*.log {
...
compress
delaycompress
...
}
压缩后的日志文件命名格式为access_log.2025-10-25.gz(假设轮转日期为2025-10-25)。定期清理过期日志是保持系统整洁的重要环节,可通过以下方式实现:
rotate参数:设置保留日志的天数(如rotate 30保留30天),自动删除超过期限的日志;find /var/log/httpd/ -type f -mtime +30 -name "*.log" -exec rm -f {} \;),删除30天前的日志文件,并通过crontab设置定时任务(如每日凌晨2点执行);journalctl --vacuum-time=30d命令删除30天前的系统日志。