Nginx日志分割
Centos7.6
1-问题
日志文件持续增大
nginx会按照nginx.conf的配置生成access.log和error.log
随着访问量的增长,日志文件会越来越大,既会影响访问的速度(写入日志时间延长),也会增加查找日志的难度
查看日志
[root@Ngnix-test ~]# cd /opt/apps/nginx/logs/
[root@Ngnix-test logs]# ll -h
total 9.1G
-rw-r--r-- 1 root root 8.9G Jan 26 11:01 access.log
-rw-r--r-- 1 root root 37M Jan 26 11:14 error.log
-rw-r--r-- 1 root root 6 Jan 26 10:45 nginx.pid
2-map方式
Nginx内部配置设置日志文件格式
需要使用到 timeiso8601内嵌变量来获取时间,time_iso8601 内嵌变量来获取时间
time_iso8601格式如下:2018-09-21T16:01:02+02:00。然后使用正则表达式来获取所需时间的数据
按天分割日志
#配置在server段
注意层次关系,这段脚本一定要加到server配置内部,且if要在access_log前面,否则set的变量将无法引用
#编辑nginx配置文件
[root@Ngnix-test logs]# vim /opt/apps/nginx/conf/nginx.conf
#在server内添加以下内容
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {
set $year $1;
set $month $2;
set $day $3;
}
access_log /opt/apps/nginx/logs/access_$year-$month-$day.log main;
#注:/opt/apps/nginx/logs是nginx日志路径
>重启nginx
[root@Ngnix-test logs]# /opt/apps/nginx/sbin/nginx -s reload
查看日志
[root@Ngnix-test logs]# ll -h
total 9.1G
-rw-r--r-- 1 root root 12M Jan 26 11:23 access_2024-01-26.log
-rw-r--r-- 1 root root 8.9G Jan 26 11:01 access.log
-rw-r--r-- 1 root root 37M Jan 26 11:23 error.log
-rw-r--r-- 1 root root 6 Jan 26 10:45 nginx.pid
#按天分割的日志已生成,原access.log可以删除
3-定时任务
防止nginx文件过多,可以删除超过7天的nginx文件
[root@Ngnix-test logs]# crontab -e
#每天凌晨1点删除nginx超过10天的日志
* 1 * * * find /opt/apps/nginx/logs -name "access_2024*.log" -type f -mtime +10 -exec rm -f {} \;
4-按小时分割
在必要的时候可以按小时分割,方便日志分析
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})")
{
set $year $1;
set $month $2;
set $day $3;
set $hour $4;
set $minutes $5;
set $seconds $6;
}
access_log /opt/apps/nginx/logs/access_$year-$month-$day-hour-minutes-seconds.log main;