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实现日志滚动的效果,此处先演示手动实现日志滚动的操作,手动操作步骤如下:

一、进入日志目录
cd /var/log/nginx
 
二、重命名日志文件
此处,假设当前时间为2019年2月12日凌晨0点5分,我想要在这个时间点切割日志,所谓的"切割",并不是真的把一个文件"切成两个",只是把原来的"access.log"文件重命名,比如重命名为昨天的日期"access.log-20190211",然后再创建一个名为"access.log"的新文件,以便新生成的日志仍然可以写入到名为"access.log"的新文件中,这样就能实现所谓的"日志滚动"或者"日志切割"的效果了。
但是,这样做会遇到一些问题,我们来手动操作一下,首先,重命名文件
# mv access.log access.log-20190211
我们已经重命名了"access.log"文件,但是你会发现,重命名后,nginx日志仍然会写入到"access.log-20190211"文件中,并不会自动创建一个新的"access.log"文件,即使你手动创建了一个新的"access.log"文件,nginx仍然会把日志写入到重命名后的"access.log-20190211"文件中。
出现上述情况,是因为nginx进程读写日志文件时,是通过文件描述符去操作的,虽然我们修改了原"access.log"文件的文件名,但是原文件描述符与文件本身的对应关系仍然存在,所以,单单对文件重命名是不够的,我们需要让nginx重新打开一个新文件,以便将新的日志写入到新文件中。
 
三、发送信号
此刻,就需要用到我们刚才提到的reopen信号了,我们需要向nginx主进程发送一个reopen信号,以便nginx能够打开一个新的日志文件,具体命令如下:
# nginx -s reopen
执行完上述命令后,你会发现日志目录中自动生成了一个新的"access.log"文件,再次访问nginx,会发现新生成的日志已经写入到了新生成的"access.log"文件中了。

如果每天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"配置文件,你会从中找到如下一行命令

kill -USR1 `cat /var/run/nginx.pid`
看到此处你一定明白了,无论是我们自己编写脚本,还是通过别的什么方式,其实本质上都是在向nginx进程发送信号,只是实现的方法不同,本质上是完全一样的。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容