首页 > 系统相关 >(转)Linux环境下使用logrotate工具实现nginx日志切割

(转)Linux环境下使用logrotate工具实现nginx日志切割

时间:2024-06-20 09:59:25浏览次数:13  
标签:文件 log 转储 nginx logrotate Linux 日志

原文:https://www.cnblogs.com/even160941/p/13903291.html

一. 前提背景及需求

Nginx运行日志默认保存在Nginx安装目录下的 /usr/local/nginx/logs目录(或/var/log/nginx目录下), 包含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 {
    create 0644 nginx root
    daily
    rotate 10
    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 10:一次将存储7个归档日志。对于第8个归档,时间最久的归档将被删除

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

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

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

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

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

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

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

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

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

 

主要参数含义解释:

复制代码
monthly                   # 每月一次切割,取代默认的一周
minsize 1M              # 文件大小超过 1M 后才会切割
create 0664 root utmp            # 指定新建的日志文件权限以及所属用户和组
rotate 1                    # 只保留一个日志.
compress             # 通过gzip 压缩转储以后的日志
nocompress             # 不做gzip压缩处理
copytruncate           # 用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。
nocopytruncate     # 备份日志文件不过不截断
create mode owner group        # 轮转时指定创建新文件的属性,如create 0777 nobody nobody
nocreate              # 不建立新的日志文件
delaycompress                  # 和compress一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress         # 覆盖 delaycompress 选项,转储同时压缩。
missingok         # 如果日志丢失,不报错继续滚动下一个日志
errors address        # 转储时的错误信息发送到指定的Email地址
ifempty          # 即使日志文件为空文件也做轮转,这个是logrotate的缺省选项
notifempty       # 当日志文件为空时,不进行轮转
mail address             # 把转储的日志文件发送到指定的E-mail地址
nomail           # 转储时不发送日志文件
olddir directory        # 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir             # 转储后的日志文件和当前日志文件放在同一个目录下
sharedscripts             # 运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本 
prerotate              # 在logrotate转储之前需要执行的指令,例如修改文件的属性等动作;必须独立成行
postrotate                 # 在logrotate转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成行
daily              # 指定转储周期为每天
weekly           # 指定转储周期为每周
monthly           # 指定转储周期为每月
rotate count              # 指定日志文件删除之前转储的次数,0指没有备份,5 指保留5个备份
dateext             # 使用当期日期作为命名格式
dateformat .%s            # 配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数
size(或minsize) log-size       # 当日志文件到达指定的大小时才转储,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem).当日志文件 >= log-size 的时候就转储。 以下为合法格式:(其他格式的单位大小写没有试过)
size = 5 或 size 5 (>= 5 个字节就转储)
size = 100k 或 size 100k
size = 100M 或 size 100M
复制代码

 

 

3. 运行logrotate

logrotate命令格式:

复制代码
logrotate --help
Usage: logrotate [OPTION...] <configfile>
-d, --debug Don't do anything, just test (implies -v):debug模式,测试配置文件是否有错误。
-f, --force Force file rotation :强制转储文件。
-m, --mail=command Command to send mail (instead of `/bin/mail') : 压缩日志后,发送日志到指定邮箱。
-s, --state=statefile Path of file status 
-v, --verbose Display messages during rotation :显示转储过程
-l, --log=STRING Log file
--version Display version information

Help options:
-?, --help Show this help message
--usage Display brief usage message
复制代码

 

使用指令: 

logrotate /etc/logrotate.d/nginx

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

使用指令: 

logrotate -d /etc/logrotate.d/nginx

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

使用指令: 

logrotate -vf /etc/logrotate.d/nginx

 查看各个log文件的具体执行情况,这里记录的是上一次的执行状态

使用指令:

cat /var/lib/logrotate/logrotate.status

标签:文件,log,转储,nginx,logrotate,Linux,日志
From: https://www.cnblogs.com/liujiacai/p/18258118

相关文章

  • linux - curl
    curl(commandlineuniformresourcelocator),URL命令行,用于发送http请求场景:项目运维过程中,如果没有postman工具,会用到这些命令;docker容器内,如果没有开放端口,只能进容器内用curl进行测试了。#不带有任何参数时,curl默认发出GET请求。curlhttps://www.baidu.com......
  • linux - nfs挂载
    NFS(全称NetworkFileSystem),即网络文件系统。通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。一般的挂载,是买一个新硬盘,然后挂载到我们的系统,而NFS挂载,是把其它主机的文件夹,挂载到我们的系统,完成NFS挂载之后,操作其它主机的文件,就像操作本机的文件一样。效果:理解......
  • linux - grep
    系统运维中,查看日志时,最经常使用的就是grep、cat和tail三个命令。grep(globalregularexpression)命令,用于查找文件中符合条件的字符串基本语法:grep[选项][文件]参数选项:-i:忽略大小写进行匹配。-v:反向查找,只打印不匹配的行。-n:显示匹配行的行号。-r:递归查找子目......
  • linux - cat
    系统运维中,查看日志时,最经常使用的就是grep、cat和tail三个命令。cat(英文全拼:concatenate)命令,用于连接文件并打印到标准输出设备上。命令语法:cat[选项][文件]参数选项:-n:显示行号;-b:显示非空行号;-s:合并空白行;-E:在每行结尾添加$符号;-T:将制表符显示为^I,tab键......
  • linux - tail
    系统运维中,查看日志时,最经常使用的就是grep、cat和tail三个命令。head与tail是两个成对的命令,语法基本一致,head用于看文件开头,tail用于看文件结尾。区别:使用-n命令是,含义可能与理解的不同;head无法持续跟踪文件内容,也就是没有说-f命令。#查看文件的最后10行内......
  • Docker部署安装应用大集合(Tomcat、Nginx、Mysql、Redis、MQ、Nacos、Zookeeper、Port
    Docker部署安装应用大集合(Tomcat、Nginx、Mysql、Redis、MQ、Nacos、Zookeeper、Portainer、MongoDB......) 精选 原创CodeDevMaster2022-11-1608:42:24博主文章分类:Docker©著作权文章标签dockermysqlNginxNacosMQ文章分类Docker云计算yyds干货盘点 Docker部署......
  • (超详细)三级信息通信网络运行管理员第七套linux实操题讲解(五)
    目录一、Linux实操部分前期解析二、创建卷组 ​编辑 三、创建逻辑卷四、磁盘挂载一、Linux实操部分前期解析 接着上一期,我们讲解完了ENSP部分,现在到了Linux部分的实操,如下图:  可以看到Linux部分有17道题,总分50分,难度也是不难的,做linux部分我建议先准备一下前期......
  • Linux 中断实验
    Linux中断实验先来回顾一下裸机实验里面中断的处理方法:①、使能中断,初始化相应的寄存器。②、注册中断服务函数,也就是向irqTable数组的指定标号处写入中断服务函数②、中断发生以后进入IRQ中断服务函数,在IRQ中断服务函数在数组irqTable里面查找具体的中断处理函数,找......
  • linux下C语言如何操作文件(四)
    structstring_segment*parse_path(constchar*file_path)函数,解析路径,将一个linux的路径分成两部分路径和文件名。返回一个字符串分段接头体指针,里边有三个字符串。第0个是原始的file_path,第二个是已经拆分好的路径,第三个是文件名部分。代码如下:/***解析linux下的路径......
  • Linux部署Mysql(服务器)
     远程服务器:CentOS7.6(本地VM也一样)连接:XShell7与Xftp7 1. 下载tar包与准备工作查看系统的glibc版本:(我的是2.17)rpm-qa|grepglibc 官网下载对应的Mysqltar包:https://dev.mysql.com/downloads/mysql/ #查找与mysql相关的软件包......