logrotate对nginx做日志切割-实现按照每天切割

这篇具有很好参考价值的文章主要介绍了logrotate对nginx做日志切割-实现按照每天切割。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

logrotate简述

logrotate程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用。可以节省磁盘空间。

通过在/etc/logrotate.d/ 目录下进行自定义配置相关参数,从而达到想要的切割日志方案。

准备环境

1.检查当前系统是否存在logrotate

rpm -qa logrotate

logrotate 切割nginx日志,nginx,linux,运维

2.安装logrotate

yum -y install logrotate

注:一般centos系统默认会安装有logrotate

logrotate目录

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

说明:如果您在logrotate.d目录下配置了Nginx的轮转规则,那么需要等待logrotate.conf指定的执行周期。默认logrotate.conf指定周期是一周。

可以查看logrotate.conf文件 cat /etc/logrotate.conf

# see "man logrotate" for details

# global options do not affect preceding include directives

# rotate log files weekly
weekly                 #  每周执行一次轮转存储

# keep 4 weeks worth of backlogs
rotate 4                #  保存4个文件,意思就是只保存四周的日志文件也就是一个月

# create new (empty) log files after rotating old ones
create                  # 轮转后,创建一个新的空文件,指定logrotate自动建立新的日志文件,新的日志文件具有和原来的文件一样的权限。

# use date as a suffix of the rotated file
dateext                # 使用当期日期作为轮转日志的后缀名

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d   # 将 /etc/logrotate.d/ 目录中的所有文件都加载进来

# system-specific logs may be also be configured here.

logrotate命令参数说明

-d, --debug :debug模式,测试配置文件是否有错误。

-f, --force :强制转储文件。

-m, --mail=command :压缩日志后,发送日志到指定邮箱。

-s, --state=statefile :使用指定的状态文件。

-v, --verbose :显示转储过程。

logrotate -d /etc/logrotate.d/nginx   # 查看配置好的nginx文件是否有错误 如果有错误会出现 skipping 关键字

logrotate -vf /etc/logrotate.d/nginx # 立即执行配置好的nginx文件,并显示执行信息

logrotate文件编写常用参数

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

 说明:如果参数不选择dateext 切割的日志文件命名是access.log.1,access.log.2依次类推,选择了dateext参数,access.log.20230918这样安装当前日期命名。

copytruncate  和 create 两种方式只能选一个

copytruncate  方式是将日志文件复制一份后清空原日志文件的内容,并对复制的文件进行归档操作,应用程序继续向原日志文件输出日志。因日志文件复制与清空操作存在时间间隔,所以切割操作会因日志量的大小及实时产生的频率存在丢失的情况;

create 方式是将日志文件重命名,因日志文件的 inode 编号不变,应用程序会向新命名的文件输出日志。Logrotate 新创建原日志文件名的文件后执行重启或以信号机制通知应用程序重新向新日志文件输出日志内容,完成切割操作;

logrotate实际举例

在进行logrotate编写nginx日志切割配置之前,应该先对nginx的配置做处理(nginx.conf)

配置nginx的access.log、error.log日志输出位置

    # 自定义access.log的保存的信息
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

     # 定义日志路径和按日切割
    access_log       /data/nginx_logs/access.log main;
    error_log        /data/nginx_logs/error.log;

 自定义access.log日志的参数信息说明:这个也是nginx自带的,只是现在把它的前面的注释取消了。

  • $remote_addr: 记录客户端的IP地址。
  • $remote_user: 记录客户端用户(如果有)。
  • [$time_local]: 记录请求的时间和日期(本地时间)。
  • "$request": 记录包含HTTP请求方法、URI和协议的字符串。
  • $status: 记录服务器响应的状态码。
  • $body_bytes_sent: 记录发送给客户端的响应体字节数。
  • "$http_referer": 记录引用页面的URL。
  • "$http_user_agent": 记录客户端浏览器或用户代理的信息。
  • "$http_x_forwarded_for": 记录通过代理服务器转发请求时的客户端真实IP地址。

大家重新配置了之后需要重启nginx。

1. 在/etc/logrotate.d目录下新建一个logrotate配置如:nginx

vim /etc/logrotate.d/nginx

2. 填写如下配置

/data/nginx_logs/*.log { # 对某个日志文件进行切割,这里填路径

    daily                # 按天切割
    missingok            # 如果日志丢失,不报错继续滚动下一个日志
    ifempty              # 空的文件也做切割
    rotate 180           # 备份数量180 其实也就是按天保存的话是180天
    dateext              # 切割后日志文件名+当前日志
    nocompress           # 不做压缩
    create 0644 nginx nginx # 创建一个新的并赋予权限 用户nginx 用户组nginx
    olddir /data/nginx_logs/days # 日志切割后存放路径
    sharedscripts
    postrotate 
      if [ -f /usr/local/nginx/logs/nginx.pid ]; then 
 
         kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
    
      fi
    endscript
}

一般nginx.pid 在默认nginx日志文件夹下面

说明:postrotate 后面代码的含义:首先检查是否存在/usr/local/nginx/logs/nginx.pid文件,如果存在,则使用kill -USR1命令向Nginx主进程发送USR1信号来重新打开日志文件。这个操作可以使Nginx重新打开日志文件,实现日志切割效果而不需要重启Nginx服务。

注: kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` 这个不是单引号,是反引号。

3. 检查是否配置有问题

logrotate -d /etc/logrotate.d/nginx

4. 测试

当你编辑好了,可以先直接执行

logrotate -f /etc/logrotate.d/nginx

 查看你对应的文件是否保存对应日志文件

5. 配置定时任务

说明:为什么要配置定时任务?是因为logrotate.d下配置的日志轮转方案,是在logrotate.conf执行的时候才会执行,而logrotate.conf默认执行是按周执行一次,即使在Nginx的轮转规则中设置了每天一次的轮转频率,但仍然需要等待logrotate.conf的执行周期才会触发轮转操作。因为logrotate.conf是整个系统日志轮转的主配置文件,它会覆盖logrotate.d目录下的子配置文件。

方式一:直接配置logrotate的定时任务

crontab -e

如下配置:

# 每天凌晨执行

0 0 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/nginx

 cront时间配置说明,注意有空格

logrotate 切割nginx日志,nginx,linux,运维

 command是路径

还有一种方式是写一个shell脚本定时去执行这个shell脚本,而这个shell脚本里面配置执行logrotate

方式二:通过shell代替

cd /data/nginx_logs

mkdir sh

vim nginx_logs.sh

#!/bin/bash
/usr/sbin/logrotate -vf /etc/logrotate.d/nginx

 给nginx_logs.sh赋予执行权限

chmod +x /data/nginx_logs/sh/nginx_logs.sh

配置定时任务

crontab -e

0 0 * * * /data/nginx_logs/sh/nginx_logs.sh

达到的效果和方式一 一致。

6. 测试

你可以先设置定时任务执行时间,每分钟执行一次,这样就能检查到定时任务是否有问题。

# 每分钟执行

* * * * * /usr/sbin/logrotate -vf /etc/logrotate.d/nginx

7. 查看定时任务

crontab -l

8. 检查cron日志

如果上述的切割没执行成功,可以检查cron的日志。检查定时任务是否存在错误。

cat /var/log/cron

参考:Nginx日志切割及配置_nginx日志切割配置_tag心动的博客-CSDN博客

Linux Logrotate日志切割管理_日志是每天分割_小百菜的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-781713.html

到了这里,关于logrotate对nginx做日志切割-实现按照每天切割的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux清理系统日志或临时文件logrotate使用方法

    logrotate 是 Linux 系统中用于管理日志文件的工具,可以自动轮转日志文件,防止日志文件过大占用过多磁盘空间。下面是 logrotate 的基本使用方法: 编写 logrotate 配置文件 首先需要编写 logrotate 的配置文件,配置文件的路径通常为 /etc/logrotate.conf 或 /etc/logrotate.d/ 目录下的文件

    2023年04月27日
    浏览(42)
  • nginx 日志,格式化,存储,按日切割

    nginx 有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志, 所需日志模块 ngx_http_log_module 的支持,日志格式通过 log_format 命令来定义,日志对于统计和排错是非常有利的,下面总结了 nginx 日志相关的配置 包括 access_log 、 rewrite_log 、 error_log 。 可以应用

    2024年02月09日
    浏览(40)
  • Nginx访问日志切割的三种方法

    接下来,很简单,shell 脚本来了 这已经达到了我们想要的效果了,点个赞 当然还有最重要的一步,那就是要做好定时任务 这种切割的方法,一开始我是不知道的,因为我之前的 nginx 都是使用源码安装的,在一次偶然的情况下,使用了 yum 安装的方式安装了 nginx,然后发现 n

    2024年02月14日
    浏览(71)
  • linux设置日志文件保存时间为6个月(/etc/logrotate.conf)

    1、编辑/etc/logrotate.conf文件 将全局的weekly下的rotate 4改为rotate 24,表示6个月; 将指定文件的monthly下的rotate 1改为rotate 6,表示6个月。  2、重启日志服务

    2024年02月11日
    浏览(63)
  • centos logrotate 日志轮转分割

    1、logrotate 原理 logrotate也就是日志滚动,服务器日志文件大小增长较快,不断消耗磁盘空间就会触发告警,需要人为定期按照各种维度去手动清理日志就显得十分棘手。为了节省空间和方便整理,可以将日志文件按时间或大小分成多份,删除时间久远的日志文件,这就是通常

    2024年02月05日
    浏览(50)
  • Linux运维:系统日志篇

    您可以将系统日志理解为记录系统运行情况的一种日记。它包含了各种级别的信息,从调试信息和错误报告到警告和系统事件等。通过对系统日志进行分析,管理员可以了解系统的状态和运行情况,发现并解决问题,确保系统的正常运行。因此,系统日志是管理和维护 Linux

    2024年02月05日
    浏览(106)
  • Gin框架原生方式切割日志,Go语言原生日志切割

    目录 摘要 痛点 正文 1.分析 io.Writer 接口 2.实现 io.Writer 接口 3.将它作为原生输出 4.将它作为 Gin 框架的输出 自定义一个日志输出,将go语言和gin框架的日志自动按天拆分。本文通过实现io.Writer接口的方式,替换原生和gin框架的默认Writer,并植入了自定义的逻辑。该示例只讲述

    2024年02月09日
    浏览(49)
  • 【Linux深造日志】运维工程师必会Linux常见命令以及周边知识!

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 : 《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活!   哈喽各位宝子们好啊!我是博主鸽芷咕。日志这个东西我相信大家都不陌生,在 linxu/Windows 系统中每天运行都会产生各种系统日志。而咱们每天学习知识也是一

    2024年04月17日
    浏览(63)
  • 【运维知识大神篇】超详细的ELFK日志分析教程4(ES读写文档原理+集群角色+master节点与数据节点分离+Logstash安装部署+Logstash采集本地文件+采集Nginx日志)

    本篇文章继续给大家介绍ELFK日志分析的有关内容,我们的ES和Kibana都介绍的差不多了,所以本篇文章重点介绍Logstash的有关内容,介绍完毕后,我们的ELFK架构将初步形成,此外还有ES读写文档的原理,了解原理,更深层次的理解,使用ES,集群角色和master节点与数据节点分离,

    2024年02月02日
    浏览(58)
  • GO语言日志切割 + 记录调用源

    日志记录对程序排查问题比较关键,记录下GO中日志选择,从以下出发点考虑: 日志文件能自动切割,以免过大 能记录从哪个文件哪行代码调用的,方便排查问题 配置简单明了 库文件使用人数较多,稳定 经过一段时间摸索,最终选择了 Logrus 和 lumberjack 两个库,使用人数都

    2024年02月15日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包