文章目录

  • 前言
  • 一、Logrotate是什么?
  • 二、使用步骤
    • 1.Logrotate 安装
    • 2.Logrotate 文件目录
    • 3.Logrotate 命令参数
    • 4.Logrotate 常用配置参数
    • 5.Logrotate 管理 Nginx 日志
    • 6.添加定时任务
    • 7.查看定时任务
    • 8.执行测试

前言

工作中由于Nginx日志过于庞大不方便查阅。于是在网上看了一些相关资料都是五花八门一大堆坑,今天有时间来整理一下。


一、Logrotate是什么?

Logrotate 是 CentOS 操作系统内置日志管理工具,该工具可对系统中生成的大量日志文件进行归档管理,其允许对日志文件实行压缩、删除或邮寄等操作。Logrotate 可以按照每天、周、月或达到某一大小的日志文件进行归档操作,Logrotate 基于 anacrontab 实现计划任务,只需在 /etc/logrotate.d 目录下编写相关日志管理配置文件,就可以无须人工干预使用自动化方式完成日志归档操作。

二、使用步骤

1.Logrotate 安装

指令:

yum -y install logrotate

一般CentOS 系统默认自带的,请无视这一步。

2.Logrotate 文件目录

示例如下:

/etc/logrotate.conf                     # logrotate主配置文件
/usr/sbin/logrotate                     # logrotate二进制文件
/etc/logrotate.d/                       # 自定义logrotate配置文件
/var/lib/logrotate/logrotate.status     # logrotate管理日志执行记录的状态文件

我们这里使用第三项自定义配置。

3.Logrotate 命令参数

代码如下(示例):

-?, --help                           #在线帮助
-d, --debug                             # 测试归档配置文件
-f, --force                             # 立即执行归档操作
-m, --mail=command                      # 指定发送邮件的命令(默认为'/bin/mail')
-s, --state=statefile                   # 设置logrotate.status文件路径,可用于区分在同
# 一系统下以不同用户身份运行的logrotate任务
-v, --verbose                           # 显示配置详细信息
-l, --log=STRING                        # 将Logrotate执行的详情输出到指定的文件
-usage                                  #显示指令基本用法。
logrotate -v /etc/logrotate.conf                # 显示配置文件详细信息
logrotate -d /etc/logrotate.d/syslog -l /var/log/logrotate.log  # 配置文件,执行测试
logrotate -f /etc/logrotate.d/syslog    # 立即执行当前配置文件

一般CentOS 系统默认自带的,请无视这一步。

4.Logrotate 常用配置参数

常用参数如下(示例):

指令   指令说明
归档执行周期
hourly  #日志归档周期为 1 小时,默认 Logrotate 的最小周期为 1 天,需额外调整该参数才可生效
daily   #日志归档周期为 1 天
weekly  #日志归档周期为 1 周
monthly #日志归档周期为 1 月,通常为每月的第一天归档执行条件
include #读取外部参数文件
missingok   #如果日志文件不存在,则不显示错误信息
nomissingok #如果日志文件不存在,则显示错误信息。默认配置
size    #日志文件可被归档的最小值
minsize #日志文件可被归档的最小值,没到归档周期执行时间,不会执行归档操作
maxsize #日志文件超过设定值时,即使没到归档周期执行时间,也会执行归档操作
ifempty #即使日志文件为空,也执行归档操作
notifempty  #如果日志文件为空,则不进行归档。默认设置
tabooext    #不对设置扩展名的日志文件执行归档操作归档文件命名
start count #使用日志文件归档次数作为归档文件扩展名,count 默认值为 1,默认配置
dateext #为归档文件名添加日期,默认追加到扩展名后
dateformat  #设置归档文件名中的日期格式,使用“%Y%m%d%H”作为说明符,默认为-%Y%m%d
dateyesterday   #使用前一天的日期而非创建归档文件时的日期作为归档文件的文件名中的日期
extension   #指定日志的扩展名,并将其设置为归档文件的扩展名,启用压缩时,压缩的扩展名在最后
compressext #启用压缩时,自定义归档文件扩展名,如将“.gz”改为“.ddd”归档文件保存方式
compress    #对归档文件启用压缩,默认为 gzip 压缩
nocompress  #不压缩归档文件。默认设置
compresscmd #指定压缩归档文件的命令,默认为 gzip 压缩
uncompresscmd   #指定解压归档文件的命令,默认为 gunzip 解压
compressoptions #启用压缩时,设置压缩工具的命令选项
delaycompress   #在下一个归档周期再对当前归档文件进行压缩
nodelaycompress #不延迟压缩。默认设置归档执行方式
copy    #为日志文件复制一个副本后再进行归档
nocopy  #不复制源日志文件。默认配置
copytruncate    #复制日志文件后清空日志文件的内容
nocopytruncate  #复制源日志文件后,不清空源文件。默认设置
create mode owner group, create owner group #重命名日志文件,创建与日志文件同名的文件,默认 mode=0644 uid=0 gid=0,与 copy 指令不能同时使用
nocreate    #不创建与日志文件同名的文件。默认设置
olddir  #设置归档文件保存目录
noolddir    #归档文件与源文件在同一目录。默认设置
createolddir mode owner group   #如果 olddir 参数指定的目录不存在,则创建目录并指定属组,默认 mode = 0777 uid = 0 gid = 0
nocreateolddir  #当 olddir 参数设定目录不存在时,不创建目录。默认设置
prerotate … endscript   #归档执行之前执行脚本,日志文件名为传入的第一个参数
postrotate … endscript  #归档执行之后执行脚本,日志文件名为传入的第一个参数
firstaction … endscript prerotate #脚本之前,仅当第一个日志文件被开始执行归档操作时才执行脚本,日志文件名为传入的第一个参数
lastaction … endscript  postrotate #脚本之后,仅当最后一个日志文件执行归档操作结束时才执行脚本,日志文件名为传入的第一个参数
preremove … endscript   #删除日志文件之前执行脚本,日志文件名为传入的第一个参数
sharedscripts   #当匹配的日志文件为多个时,prerotate 和 postrotate 脚本会在每个日志文件执行归档操作时都执行一次,启用共享模式会让 prerotate 和 postrotate 脚本在全局只运行一次
nosharedscripts #当匹配的日志文件为多个时,prerotate 和 postrotate 脚本会在每个日志文件执行归档操作时都执行一次。默认设置
su user group   #指定操作源文件执行归档操作的用户及属组归档文件清理
mail    #设置接收归档文件的邮件地址
nomail  #不将归档文件发送到任何邮件地址
mailfirst   #将刚生成的归档文件发送到设置的邮箱
maillast    #将要超过 maxage 设置时间的归档文件发送到设置的邮箱
mахage  #设置过期归档文件的天数
rotate  #保留归档文件数,默认为 0
shred   #彻底删除
shredcycles count   #彻底删除时,覆盖文件的次数,默认为 3
noshred #不彻底删除

关于上表有以下几点需要说明:

copy 与 create 是两种互斥的归档执行方式;
copy 方式是将日志文件复制一份后清空原日志文件的内容,并对复制的文件进行归档操作,应用程序继续向原日志文件输出日志。因日志文件复制与清空操作存在时间间隔,所以切割操作会因日志量的大小及实时产生的频率存在丢失的情况;
create 方式是将日志文件重命名,因日志文件的 inode 编号不变,应用程序会向新命名的文件输出日志。Logrotate 新创建原日志文件名的文件后执行重启或以信号机制通知应用程序重新向新日志文件输出日志内容,完成切割操作;
当与同一自定义配置匹配的日志文件为多个时,会并发执行归档操作。

5.Logrotate 管理 Nginx 日志

cd /etc/logrotate.d/

在该目录下新建nginx/nginxLogrotate。在nginxLogrotate文本中配置下方相关切割参数信息。

我的配置(示例):

/opt/nginx-1.20.0/logs/access.log {  #日志文件的路径daily     #每天切割rotate 15   #日志保留15份missingok   #日志不存在分析,分析下一个notifempty   #空文件不转储nocompress   #被切割的日志文件不需要压缩dateext   #日志切割后,文件以当前日志为结尾,例如:access-logs-20211128sharedscripts   #整个日志组运行一次脚本postrotate   #开始脚本if [ -f /opt/nginx-1.20.0/logs/nginx.pid ]; then   #判断nginx是否启动/opt/nginx-1.20.0/sbin/nginx -s reload      #重启nginxfi /bin/kill -HUP `cat /opt/nginx-1.20.0/logs/nginx.pid 2> /dev/null` 2> /dev/null || true  #防止切割的新日志文件出现旧日志endscript   #结束脚本
}

我这里采用的是 自定义logrotate配置文件。

6.添加定时任务

指令:

crontab –e

添加下面内容

59 23 * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginx/nginxLogrotate >/dev/null 2>&1

我这里配置的是每天晚上23点59分开始切割日志(按照自己需求修改)

7.查看定时任务

指令:

crontab –l

查看当前机器所有定时任务。可以看到定时任务已经添加成功!

8.执行测试

指令:

logrotate -f /etc/logrotate.d/nginx/nginxLogrotate

进入Nginx查看效果:

cd /opt/nginx-1.20.0/logs
ll

效果图:

Nginx日志切割及配置相关推荐

  1. 12.10 Nginx访问日志 12.11 Nginx日志切割 12.12 静态文件不记录日志和过期时间

    - 12.10 Nginx访问日志 - 12.11 Nginx日志切割 - 12.12 静态文件不记录日志和过期时间# 12.10 Nginx访问日志 - 日志的格式- vim /usr/local/ ...

  2. nginx日志切割并使用flume-ng收集日志

    nginx的日志文件没有rotate功能.如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件. 第一步就是重命名日志文件,不用担心重命名后nginx找不到 ...

  3. Nginx日志文件的配置

    Nginx日志文件的配置 Nginx的日志文件,默认在Nginx程序安装目录的logs二级目录下. 与Nginx日志相关的指令有两条 log_format,用来设置日志的记录格式. Access_lo ...

  4. 6月8日任务(12.10 Nginx访问日志 12.11 Nginx日志切割 12.12 静态文件)

    课程名称:12.10 Nginx访问日志 笔记内容: [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf 定义日志格式 combined_ ...

  5. nginx日志切割脚本

    nginx的日志文件没有rotate功能.如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件. 第一步就是重命名日志文件,不用担心重命名后nginx找不到 ...

  6. nginx日志切割配置

    1)日志切割脚本 #!/bin/bash LOG_PATH="/usr/local/nginx/logs" RECORD_TIME=$(date -d "today&qu ...

  7. logrotate测试_使用 logrotate 对 apache/nginx 日志切割

    logrotate 是 linux 系统用来分割日志的系统工具,可以方便将日志按周期(日,周,月)和大小进行分割. 当我们的服务器访问量比较大时,服务器的 access.log 可能会 G/天的级别增 ...

  8. nginx日志切割logrotate

    环境是docker-compose,日志是挂载出来的,通过logrotate进行日志切割. 安装logrotate yum install logrotate -y 在 /etc/logrotate. ...

  9. nginx 日志切割

    nginx根据日期记录日志 (2017-03-23 10:38:20)转载▼ 标签: nginx 日志 根据日期记录日志 linux 分类: nginx 在ngixn.cnf中当前项目server模块 ...

最新文章

  1. Flume(NG)架构设计要点及配置实践
  2. 业务逻辑写在存储过程好还是后端好_后端两小时,前端一星期!你只是一个写接口的工程师吗?...
  3. python怎么画简单图片-Python绘制简易的二维图像
  4. Python用selenium获取cookie以后给rqeuests使用。
  5. 1968: [Ahoi2005]COMMON 约数研究
  6. Bug错误openssl_encrypt()
  7. 代码统计工具有哪几种_跟我学“Linux”小程序Web版开发(四):引入统计及Crash收集...
  8. 具备什么样的能力,才能在人工智能企业中获得一席之地
  9. RabbitMQ 管控台配置导入导出和重要性
  10. emlog和typecho文章采集插件 简数第三方数据采集
  11. 试翻译Output Cache Improvements in Orchard 1.9
  12. 形容计算机专业好句子,关于形容专业水平高的句子大全 精于专业的名言警句...
  13. 2018怎么打开2019_2019年养老金涨幅5%,这几个方面有调整,你到手的钱增加没
  14. iOS 将本地项目/demo上传到github的简单方法
  15. 卸载WPS后Office文档图标显示异常
  16. 除了加速上币,OKEx在DeFi热潮中还能做什么?
  17. 牛客小白月赛7 谁是神箭手
  18. Android手机录制屏幕及转GIF
  19. 关于 RT-Thread 内核调度算法中 __rt_ffs函数为什么要检测 value值是否为0的疑问
  20. 启动SpringBoot 错误: 找不到或无法加载主类 com.xx.xxApplication

热门文章

  1. iOS动画之【添加商品到购物车】:将商品图片icon 移动到购物车iocn的位置
  2. decode的mysql用法_oracle中decode函数的使用方法示例
  3. R CrossTable生成二维列联表
  4. 香港宁德市同乡总会青年委员会成功举办第八届五四菁英论坛
  5. iPhone键盘改变颜色
  6. git 拉取远程分支到本地(最简单方式)
  7. 2008系统开ftp服务器配置,win2008 r2开启ftp服务器配置
  8. 【百分百成功】Window 10 Google Chrome无法启动更新检查(错误代码为1:0x80004005)
  9. 密码学之仿射加密解密算法
  10. 笔记本电脑(没有num按键)如何关闭数字小键盘