Nginx默认没有提供对于日志的切割功能,因此随着时间增长,日志文件会不断增大,影响日志写入性能。Logrotate是一个日志文件管理工具,可以自动实现日志切割、轮转、压缩、删除等,可以有效实现nginx日志切割。
1. 安装logrotate
大多数 Linux 发行版已经预装了 logrotate。如果没有安装,可以通过包管理器安装:
sudo apt-get install logrotate # Debian/Ubuntu
sudo yum install logrotate # CentOS/RHEL
2. 配置logrotate
logrotate 的配置文件通常位于 /etc/logrotate.conf,而特定应用的日志配置文件通常放在 /etc/logrotate.d/ 目录下。为了配置 Nginx 日志切割,我们可以在 /etc/logrotate.d/ 目录下创建一个名为 nginx 的配置文件。
3. 配置示例
/path/to/log/*.log
{
daily
missingok
rotate 7
maxsize 10k
olddir /old/dir/path
createolddir 755 root root
dateext
dateformat .%Y-%m-%d-%H
notifempty
compress
delaycompress
sharedscripts
postrotate
if [ -f /path/to/nginx.pid ]; then
kill -USR1 `cat /path/to/nginx.pid`
fi
endscript
}
daily:每天切割日志文件。
missingok:如果指定的日志文件不存在,logrotate 不会报错并继续处理其他日志文件。
rotate:切割文件保留的最大个数。
maxsize:切割阈值,当日志文件超过maxsize后,即使未达到切割频率也会触发切割。
olddir:归档目录。
createolddir:若归档目录不存在,则创建。
dateext:归档日志文件后缀。
dateformat:指定归档日志文件后缀格式。
notifempty:若日志文件为空,则不进行切割。
compress:归档日志进行压缩。
delaycompress:延迟压缩,即最近一个归档日志不进行压缩。
sharedscripts:共享指令,仅调用一次。
postrotate:日志切割后触发调用。
4. logrotate调度
(1)依赖logrotate cron调度,将上述配置文件置于/etc/logrotate.d/目录下,默认每天执行一次,适用于一般场景;
(2)自定义crontab定时任务;