Nginx实战案例--日志切割

我们知道,nginx会将访问日志写入到logs/access.log日志文件中,天长日久,access.log文件就会越来越大,如果访问量巨大,并不用多长时间,access.log文件的体积就会变得非常大,对于我们的管理工作来说,这是不利的,首先,当我们打开一个非常大的日志文件时,就会比较慢,而且,从一个非常大的日志中找到某个时间段的日志也会比较慢。
例如:
使用命令访问nginx服务器10000次:

[root@foundation63 ~]# ab -c 1 -n 10000 http://www.westos.org/index.html

访问完成后查看access.log文件大小:

[root@server1 logs]# du -sh access.log 
1.0M	access.log

当访问100000次时,日志文件大小将会变成17M

所以,我们最好将日志按天分割开(或者按照你觉得合适的时间段分隔开),比如,每天晚上0点5分生成一个新的日志文件,0点5分之后(新的一天)的日志写入到新的日志文件中,之前的日志则保留在老的文件中,这样每天就会生成一个日志文件,而不是将所有日志都写入到同一个日志文件中。

所以,我们需要为nginx配置"日志分割"的功能,或者称之为"日志滚动"的功能,说到nginx的日志切割,要分如下两种情况来说:

一、通过编译的方式安装nginx后,默认没有日志分割的功能。

二、通过yum源的方式安装nginx后,默认会对nginx日志进行切割。

也就是说,当安装完nginx以后,默认是否存在日志滚动的功能,取决于你的安装方式。

为nginx实现日志切割的方法通常有两种,第一种方法是编写脚本实现日志切割,第二种方法是使用系统自带的日志滚动软件logrotate完成日志切割,但是无论选择哪种方法,其实都是殊途同归,在本质上都是一样的,那么,我们先来看看怎样通过最"原始"的方法为nginx进行日志滚动:

1、进入日志目录

cd /usr/local/nginx/logs

2、重命名日志文件

[root@server1 logs]# mv access.log `date +%F -d -1day`_access.log
[root@server1 logs]# ls
2020-02-25_access.log  error.log  nginx.pid

我们已经重命名了"access.log"文件,但是你会发现,重命名后,nginx日志仍然会写入到2020-02-25_access.log文件中,并不会自动创建一个新的"access.log"文件,即使你手动创建了一个新的access.log文件,nginx仍然会把日志写入到重命名后的2020-02-25_access.log文件中。
出现上述情况,是因为nginx进程读写日志文件时,是通过文件描述符去操作的,虽然我们修改了原access.log文件的文件名,但是原文件描述符与文件本身的对应关系仍然存在,所以,单单对文件重命名是不够的,我们需要让nginx重新打开一个新文件,以便将新的日志写入到新文件中。

3、发送信号
我们需要向nginx主进程发送一个reopen信号,以便nginx能够打开一个新的日志文件,具体命令如下:

[root@server1 logs]# nginx -s reopen

执行完上述命令后,你会发现日志目录中自动生成了一个新的access.log文件,再次访问nginx,会发现新生成的日志已经写入到了新生成的access.log文件中了。

发布了127 篇原创文章 · 获赞 65 · 访问量 4352

猜你喜欢

转载自blog.csdn.net/qq_35887546/article/details/104517215