一. 前提背景及需求

nginx运行日志默认保存在nginx安装目录下的 /usr/local/nginx/logs 文件夹, 包含access.log和error.log两个文件.

(1) access.log 记录了哪些用户、哪些页面以及用户浏览器、ip和其他的访问信息;

(2) error.log 则是记录服务器错误日志。

在所有时间内nginx产生的日志均保存在同一个文件下, 随着访问量的增加,尤其是access.log增长极快,服务器会很快消耗磁盘空间,影响服务器效率。

另外,当需要对日志文件里面记录的数据进行分析时,每次都要耗时很久才能下载这个庞大的日志文件,浪费不必要的时间。

因此急需一个处理方案能够自动化的实现按天或者按文件大小来切割nginx日志记录。

二. 解决方案: 使用logrotate工具实现日志切割

1. logrotate工具的介绍

logrotate是一个linux系统日志的管理工具。可以对单个日志文件或者某个目录下的文件按时间/大小进行切割,压缩操作;指定日志保存数量;还可以在切割之后运行自定义命令。

logrotate是基于crontab运行的,所以这个时间点是由crontab控制的,具体可以查询crontab的配置文件/etc/anacrontab。系统会按照计划的频率运行logrotate,通常是每天。在大多数的Linux发行版本上,计划每天运行的脚本位于 /etc/cron.daily/logrotate。

主流Linux发行版上都默认安装有logrotate包,如果你的linux系统中找不到logrotate, 可以使用apt-get或yum命令来安装。

接下来,我们查看logrotate的配置文件

rpm -ql logrotate

由下图可知,logrotate的配置文件是 /etc/logrotate.conf, 这个文件用来定义全局默认参数。

其中, /etc/logrotate.d/ 是用于存储各种自定义应用的配置文件的目录。该目录里的所有文件都会被主动的读入到 /etc/logrotate.conf中执行。该目录下的应用配置文件继承所有/etc/logrotate.conf 的默认参数。

因此我们可以新建一个针对nginx日志文件的轮循配置的文件,然后将这个文件放在 /etc/logrotate.d/ 目录下, 它就会主动的读入到/etc/logrotate.conf中执行, 以达到按指定频率定时执行的需求。

2. 创建nginx日志分割文件 (路径: /etc/logrotate.d/nginx )

新建nginx文件, 存放在/etc/logrotate.d/ 文件夹下, 内容如下:

/var/log/nginx/*.log {
daily
rotate 7
missingok
dateext
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
endscript
}

参数含义解释:

/var/log/nginx/*.log:需要轮询的日志路径

daily:日志文件分割频度。可选值为 daily,monthly,weekly,yearly

rotate 7:一次将存储7个归档日志。对于第8个归档,时间最久的归档将被删除。

missingok:在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。

dateext:使用日期作为命名格式

compress:在轮循任务完成后,已轮循的归档将使用gzip进行压缩。

nocompress:如果你不希望对日志文件进行压缩,设置这个参数即可

delaycompress:总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。

notifempty:如果日志文件为空,轮循不会进行。

sharedscripts:表示postrotate脚本在压缩了日志之后只执行一次

create 644 www root:以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。

postrotate/endscript:最通常的作用是让应用重启,以便切换到新的日志文件, 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。

3. 运行logrotate

使用指令: 

logrotate/etc/logrotate.d/nginx

测试日志切割 (如果文件的时间小于一天,不会执行切割日志 )

使用指令:

logrotate -d /etc/logrotate.d/nginx

强制轮询切割日志 ( 为了便于我们直观的观察测试结果,建议大家手动试一下 )

使用指令:

logrotate -vf /etc/logrotate.d/nginx

Linux环境下使用logrotate工具实现nginx日志切割的更多相关文章

  1. linux环境下安装tcping工具测试访问超时

    wget https://sources.voidlinux.eu/tcping-1.3.5/tcping-1.3.5.tar.gz tar zxvf tcping-1.3.5.tar.gz cd t ...

  2. Linux环境下apache性能测试工具ab使用详解

    网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环.只有让服务器处在高压情况下,才能真正体现出软件.硬件等各种设置不当所暴露出的问题. 性能测试工具目前最常见的有以下几种:ab.http_lo ...

  3. linux环境下 C++性能测试工具 gprof + kprof + gprof2dot

    1.gprof 很有名了,google下很多教程 g++ -pg -g  -o test test.cc ./test   //会生成gmon.out gprof ./test > prof.l ...

  4. Linux 环境下安装rlwrap工具

    rlwrap项目是一个“readline包装器”,它使用GNU readline库来编辑任何其他命令的键 盘输入.通过rlwrap可以进行命令的上下切换,类似历史命令. 1.下载rlwrap rpm ...

  5. [原]Fedora Linux环境下的应用工具总结

    一.办公类软件 1.Office办公:WPS 二.网络通信类软件 1.浏览器:Chrome 2.远程桌面:rdesktop(适用于Windows系列) 三.操作系统设置与优化 1.3D桌面管理:Com ...

  6. linux环境下安装tomcat并配置tomcat日志分割

    1.直接解压apache-tomcat-7.0.69.tar.gz 存放在/home目录下 根据需要自定义tomcat名称 mv apache-tomcat-7.0.69 Tomcat7 2.解压cr ...

  7. linux环境下安装的activemq的输出日志

    activemq输出日志的位置: activemq/data/activemq.log 查看activemq.log文件即可.

  8. linux环境下的GUN make学习笔记(一)

    第一章:概述 1.1:make概述 在linux环境下使用make工具能够比较容易的构建一个属于自己的工程,整个工程的编译只需要一个命令就可以完成编译.连接以至于最后的执行.不过我们需要投入一些时间去 ...

  9. Django Linux环境下部署CentOS7+Python3+Django+uWSGI+Nginx(含Nginx返回400问题处理、防火墙管理)

    本文将介绍如何在Linux系统上部署Django web项目,本次部署基于下面的架构: CentOS7+ Python3.5 + Django1.11 + uWSGI + Nginx 亲测可行!!按照 ...

随机推荐

  1. 【R语言入门】R语言中的变量与基本数据类型

    说明 在前一篇中,我们介绍了 R 语言和 R Studio 的安装,并简单的介绍了一个示例,接下来让我们由浅入深的学习 R 语言的相关知识. 本篇将主要介绍 R 语言的基本操作.变量和几种基本数据类型 ...

  2. 蓝桥杯——剪邮票(2016JavaB组第10题)

    剪邮票(16JavaB10) 如[图1], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2],[图3]中,粉红色所示部分就是合 ...

  3. java基础之一:基本数据类型

    在java中有基本数据类型和引用类型两种,今天来说下基本数据类型和其对应的包装类的之间的关系. 一.概述 java中的基本数据类型有八种,分别是char.byte.short.int.long.flo ...

  4. LeetCode 044 Wildcard Matching

    题目要求:Wildcard Matching Implement wildcard pattern matching with support for '?' and '*'. '?' Matches ...

  5. java47

    1. 1.List集合根据角标获取元素 import java.util.ArrayList; import java.util.List; public class List集合 { @Suppre ...

  6. 渗透入门rop

    原文链接:https://blog.csdn.net/guiguzi1110/article/details/77663430?locationNum=1&fps=1 基本ROP 随着NX保护 ...

  7. 建立sa用户登录

    Sa用户是SQL Server的超级管理员用户,由于该用户的特殊性,往往容易成为被攻击的漏洞对象,因此建议不要轻易启动该用户.下面讲述如何以Sa用户的身份登录当前的SQL Server系统. 第一步: ...

  8. [BJDCTF 2nd]duangShell

    [BJDCTF 2nd]duangShell 点击进去之后提示我们swp源代码泄露,访问http://xxx/.index.php.swp下载该文件 该文件产生的原因是:​使用vi编辑器打开文件时,会 ...

  9. sql绕过2

    0x00 sql注入理解 SQL注入能使攻击者绕过认证机制,完全控制远程服务器上的数据库. SQL是结构化查询语言的简称,它是访问数据库的事实标准.目前,大多数Web应用都使用SQL数据库来存放应用程 ...

  10. Zookeeper的基本原理(zk架构、zk存储结构、watch机制、独立安装zk、集群间同步复制)

    1.Hbase集群的高可用性与伸缩性 HBase可以实现对Regionserver的监控,当个别Regionserver不可访问时,将其负责的分区分给其他Regionsever,其转移过程较快,因为只 ...