nginx短篇(8):日志切割

  • A+
所属分类:Nginx  运维技术

  

博主会将与Nginx有关的知识点总结到"nginx短篇系列"文章中,如果你对nginx不是特别了解,请按照顺序阅读"nginx短篇系列",以便站在前文的基础上理解新的知识点。

 

我们知道,nginx会将访问日志写入到access.log日志文件中,天长日久,access.log文件就会越来越大,如果访问量巨大,并不用多长时间,access.log文件的体积就会变得非常大,对于我们的管理工作来说,这是不利的,首先,当我们打开一个非常大的日志文件时,就会比较慢,而且,从一个非常大的日志中找到某个时间段的日志也会比较慢,所以,我们最好将日志按天分割开(或者按照你觉得合适的时间段分隔开),比如,每天晚上0点5分生成一个新的日志文件,0点5分之后(新的一天)的日志写入到新的日志文件中,之前的日志则保留在老的文件中,这样每天就会生成一个日志文件,而不是将所有日志都写入到同一个日志文件中。

 

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

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

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

也就是说,当安装完nginx以后,默认是否存在日志滚动的功能,取决于你的安装方式,看完这篇文章你就会理解为什么会出现这种情况。

 

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

 

在之前的文章中,我们已经了解到,通过"nginx -s"命令可以向nginx的主进程(master进程)发送信号,这些信号就是quit信号、stop信号、reload信号以及reopen信号,其实,我们借助reopen信号,就能为nginx实现日志滚动的效果,此处先演示手动实现日志滚动的操作,手动操作步骤如下:

 

如果每天0点5分的时候都执行一遍上述操作,就能够实现每天日志自动滚动的效果了,当然,我们需要编写一个脚本,将上述过程自动化,然后定时执行脚本即可,其实上述过程非常简单,说白了就是重命名日志文件,发送信号,生成新的日志文件。

 

其实,除了能够使用"nginx -s"命令发送信号,我们也可以借助"kill"命令向nginx进程发送信号,你肯定经常使用kill命令,当你想要强制停掉进程的时候,会使用"kill -9 pid"向进程发送"SIGKILL"信号,除了"-9"代表的"SIGKILL"信号,我们也可以借助kill命令向进程发送一些别的信号,kill命令并不是此处讨论的重点,而是我们需要借助kill命令,向nginx主进程发送一个名为"USR1"的信号,在程序中,"USR1"信号的作用是可以自定义的,也就是说,当程序捕捉到"USR1"信号的时候进行什么操作,取决于编程时的设定,不同的程序采取的操作可能不同,而在nginx中,"USR1"信号可以帮助我们重新打开日志,换句话说就是,"nginx -s reopen"命令的作用和"kill -USR1 NginxPid"的作用是一样的,"NginxPid"指的是nginx的master进程的进程号,所以,在编写nginx日志滚动脚本时,你可以使用这两个命令中的任何一个,以便nginx可以重新打开日志文件。

 

如果你使用了yum源的方式安装了nginx,你会发现在安装完nginx后默认就有日志滚动的功能,这是因为通过yum源安装nginx后,默认会安装一个日志滚动的配置文件,这个配置文件就是"/etc/logrotate.d/nginx",可以看出,这是一个logrotate配置文件,也就是说,nginx借助这个配置文件,使用logrotate完成了日志分割的操作,通常情况下,centos系统默认自带logrotate,logrotate是一个日志管理工具,此处讨论的重点也不是logrotate,重点是nginx怎样通过logrotate完成日志滚动的,所以,打开"/etc/logrotate.d/nginx"配置文件,你会从中找到如下一行命令

看到此处你一定明白了,无论是我们自己编写脚本,还是通过别的什么方式,其实本质上都是在向nginx进程发送信号,只是实现的方法不同,本质上是完全一样的。

 

好了,关于nginx日志分割的话题就先写到这里,希望能够对你有所帮助~

weinxin
我的微信公众号
关注"实用运维笔记"微信公众号,当博客中有新文章时,可第一时间得知哦~
朱双印

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:6   其中:访客  4   博主  2

    • avatar 海盗大哥 0

      果断收藏

      • avatar oren 0

        一般看技术博客都是很少评论的,但每篇都写的太精彩了!

        • avatar 没做运维却有运维心 0

          讲解的很不错,虽然很简单但很实用!非常感觉博主的分享,虽然留言和点赞不多,但我相信看的人还是比较多的,只是懒得点赞和评论😂

            • avatar 朱双印 Admin

              @没做运维却有运维心 像你真这样留言才是正确的打开方式啊,如果能在微信公众号里面点好看就更棒了哈哈~~加油,共勉~~

            • avatar echo 6

              不是沙发 不坐😂

                • avatar 朱双印 Admin

                  @echo 哈哈,兄弟,你已经是一个成熟的6级号了,没毛病~