Apache日志轮转操作指南(基于logrotate工具)
Apache自身不直接处理日志轮转,需通过系统自带的logrotate工具实现日志分割、压缩及清理。以下是详细操作步骤:
大多数Linux发行版(如Ubuntu、CentOS)默认预装logrotate。可通过以下命令验证:
logrotate --version
若未安装,使用包管理器安装:
sudo apt-get install logrotatesudo yum install logrotatelogrotate的Apache配置文件通常位于/etc/logrotate.d/apache2(Debian/Ubuntu)或/etc/logrotate.d/httpd(CentOS/RHEL)。使用文本编辑器(如nano)打开文件,添加/修改以下规则:
/var/log/apache2/*.log { # 匹配Apache所有.log格式日志文件(如access.log、error.log)
daily # 轮转频率:每天(可选:weekly/monthly)
missingok # 若日志文件丢失,不报错继续执行
rotate 14 # 保留最近14个轮转日志文件(避免占用过多磁盘空间)
compress # 使用gzip压缩旧日志(减少存储占用)
delaycompress # 延迟压缩:本次轮转的日志在下一次轮转时再压缩(避免压缩正在写入的日志)
notifempty # 若日志为空,不进行轮转
create 640 root adm # 轮转后创建新日志文件,权限640,属主root,属组adm(符合Apache默认权限)
sharedscripts # 所有匹配的日志文件轮转完成后,统一执行postrotate脚本(避免多次重启Apache)
postrotate # 轮转后执行的脚本,用于通知Apache重新打开日志文件
if [ -f /var/run/apache2.pid ]; then \
kill -USR1 `cat /var/run/apache2.pid`; \
fi;
endscript
}
参数说明:
daily/weekly/monthly:控制轮转周期,根据日志量选择(如访问日志量大可选daily)。rotate:保留的轮转日志数量,超过则删除最旧的文件(如rotate 30保留30天日志)。compress/delaycompress:压缩旧日志以节省空间,delaycompress避免压缩正在写入的日志。create:轮转后创建新日志文件,需指定权限(如640)和属主属组(如root adm),确保Apache能写入。postrotate:关键步骤,通过kill -USR1向Apache发送信号,使其关闭旧日志文件并写入新文件。手动执行以下命令,强制轮转日志并查看处理过程(-f表示强制,即使未到轮转时间也会执行):
sudo logrotate -vf /etc/logrotate.d/apache2
观察输出是否有错误(如权限不足、文件不存在),若有错误需调整配置文件或权限。
logrotate通常由系统的cron定时任务自动执行(每日一次)。检查/etc/cron.daily/logrotate文件是否存在,内容应包含调用logrotate的命令:
cat /etc/cron.daily/logrotate
正常输出应类似:
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
若文件不存在或内容异常,需修复cron任务以确保自动轮转。
若需更详细的日志信息(如请求耗时、用户来源),可通过Apache的LogFormat和CustomLog指令自定义日志格式,再配合logrotate轮转:
/etc/apache2/apache2.conf或站点配置文件/etc/apache2/sites-available/000-default.conf)中添加:LogFormat "%h %t \"%r\" %>s %D \"%{Referer}i\" \"%{User-Agent}i\"" detailed_format
其中:%h为客户端IP,%t为时间戳,%r为请求首行,%>s为响应状态码,%D为处理时间(微秒),%{Referer}i为来源页面,%{User-Agent}i为用户代理。CustomLog /var/log/apache2/access_detailed.log detailed_format
sudo systemctl reload apache2 # 或 service apache2 reload
自定义日志同样可通过logrotate轮转(需将路径加入/etc/logrotate.d/apache2的匹配规则中)。postrotate脚本是否正确执行(如Apache PID文件路径是否正确),确保Apache重新加载配置。create指令中的权限(如640)和属主属组(如root adm)符合Apache要求,避免无法写入新日志。size参数(如size 100M),当日志达到100MB时立即轮转,避免等待周期结束。