Nginx访问日志切割的3种实现方法

 更新时间:2023年08月09日 09:52:33   作者:迷失在IT路上  
这篇文章主要给大家介绍了关于Nginx访问日志切割的3种实现方法,随着访问量的增长,日志文件会越来越大,时间长既会影响访问的速度,也会占用一部分磁盘空间,这时候就需要日志切割了,需要的朋友可以参考下

1. 使用 shell 脚本实现

接下来,很简单,shell 脚本来了

#/bin/bash 
# author  jiangexing
set -e   #脚本执行,遇到错就退出,不再往下执行
sleep 1 # 配合定时任务,0 点过一秒再开始切割任务
yesterday=$(date -d 'yesterday' +%Y-%m-%d)  #取得服务器当前时间
ng_logs_dir='/var/log/nginx'  #nginx 日志文件目录
if [ -d $ng_logs_dir ];then    #判断日志目录是否存在
  cd $ng_logs_dir 
  mv access.log  access_${yesterday}.log  #通过 mv 命令将日志移动到分割后的日志,error 日志我一般不做切割
  kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)  #发送 kill -USR1 信号给 Nginx 的主进程号,让 Nginx 重新生成一个新的日志文件
  sleep 1
  tar -czf  access_${yesterday}.log.tar.gz access_${yesterday}.log  #把旧的日志打成压缩包
  rm -f  access_${yesterday}.log  #已有压缩包,删除压缩前的日志
else
  echo "日志目录不存在,请检查"
  exit 0
fi

这已经达到了我们想要的效果了,点个赞

当然还有最重要的一步,那就是要做好定时任务

crontable -l
0 0 * * *  /usr/local/nginx/scripts/split.sh

2. 使用 logrotate 来实现

这种切割的方法,一开始我是不知道的,因为我之前的 nginx 都是使用源码安装的,在一次偶然的情况下,使用了 yum 安装的方式安装了 nginx,然后发现 nginx 的日志自动切割和压缩了,这就让我要去一探究竟了

后来发现,这个切割功能是由 logrotate 来实现的,接下来我们一起来看看看

如果系统没有安装logrotate 可以使用 

sudo yum install logrotate -y

进行安装

配置 logrotate

接下来我们就来配置 nginx 切割的配置文件,我的 nginx 日志路径在/var/log/nginx

我们在 /etc/logrotate.d/ 目录下新建一个 nginx 的文件

vim nginx
#########以下为文件配置内容##############
/var/log/nginx/*log   # 这里也可以写明对具体哪几个文件进行切割
{
    su root root
    daily
    dateext
    missingok
    rotate 7
    notifempty
    compress
    create 644 www www
    sharedscripts
    postrotate
        [ -f /usr/local/nginx/logs/nginx.pid ] && kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
    endscript
}
# 我们也可以先手 手动执行一下切割试试看看效果
logrotate -f /etc/logrotate.d/nginx

查看执行后的结果:

没错,这就是我们想要的 ,这种方式和第一种还是比较像的。

logrotate 配置项详解

logrotate 的默认配置文件是 /etc/logrotate.conf。主要参数:

  • daily–>指定转储周期为每天
  • weekly–>指定转储周期为每周
  • monthly–>指定转储周期为每月
  • dateext–>在文件末尾添加当前日期
  • compress–>通过 gzip 压缩转储以后的日志
  • nocompress–>不需要压缩时,用这个参数
  • copytruncate–>先把日志内容复制到旧日志文件后才清除日志文件内容,可以保证日志记录的连续性
  • nocopytruncate–>备份日志文件但是不截断
  • create mode owner group–>转储文件,使用指定的文件模式创建新的日志文件
  • nocreate–>不建立新的日志文件
  • delaycompress 和 compress –>一起使用时,转储的日志文件到下一次转储时才压缩
  • nodelaycompress–>覆盖 delaycompress 选项,转储同时压缩。
  • errors address–>专储时的错误信息发送到指定的 Email 地址
  • ifempty–>即使是空文件也转储,这个是 logrotate 的缺省选项。
  • notifempty–>如果是空文件的话,不转储
  • mail address–>把转储的日志文件发送到指定的 E-mail 地址
  • nomail–>转储时不发送日志文件
  • olddir directory–>转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
  • noolddir–>转储后的日志文件和当前日志文件放在同一个目录下
  • rotate count–>指定日志文件删除之前转储的次数,0 指没有备份,5 指保留 5 个备份
  • tabootext [+] list 让 logrotate –> 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
  • size–> size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及 KB (sizek)或者 MB (sizem).
  • prerotate/endscript –>在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
  • postrotate/endscript –>在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行

3. 高级用法–使用 nginx 本身来实现

当 nginx 在容器里,把 nginx 日志挂载出来的时候,我们发现就不适合再使用 kill -USR1 的方式去分割日志

这时候当然就需要从 nginx 本身配置去解决这个问题了,我们都知道访问日志里面都有一个时间相关的字段,如果我们把这个时间捞出来,这个问题就解决了

在对用的 nginx 配置文件中添加如下配置

     if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {
            set $year $1;
            set $month $2;
            set $day $3;
     }
     access_log /var/log/nginx/${year}_${month}_${day}_access.log json;

这个的日志切割可以达到秒级,用法都是一样的,去正则匹配到时间戳就好了。nginx 内置的变量有很多,列如 ${server_name} 这些变量都是可以用来命名日志

当然如果我们需要压缩,就写个对应的定时任务去做压缩就好了

总结

到此这篇关于Nginx访问日志切割的3种实现方法的文章就介绍到这了,更多相关Nginx访问日志切割内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • nginx配置访问图片路径以及html静态页面的调取方法

    nginx配置访问图片路径以及html静态页面的调取方法

    这篇文章主要介绍了详解nginx配置访问图片路径以及html静态页面的调取方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。
    2016-12-12
  • Nginx+keepalived实现七层的负载均衡的高可用(最新解决方案)

    Nginx+keepalived实现七层的负载均衡的高可用(最新解决方案)

    这篇文章主要介绍了Nginx+keepalived实现七层的负载均衡的高可用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-03-03
  • Nginx 启动脚本/重启脚本代码

    Nginx 启动脚本/重启脚本代码

    Nginx 启动脚本 重启脚本,学习使用centos配置服务器的朋友可以参考下。
    2010-10-10
  • Mac上搭建nginx+rtmp直播服务器的步骤详解

    Mac上搭建nginx+rtmp直播服务器的步骤详解

    最近的直播很火,所以这篇文章跟大家分享了在Mac上搭建nginx+rtmp直播服务器的步骤,文章通过一步步图文介绍的很详细,有需要的朋友们可以参考借鉴。
    2016-09-09
  • Nginx 只允许 www 域名访问并禁止裸域名访问的实现步骤

    Nginx 只允许 www 域名访问并禁止裸域名访问的实现步骤

    通过Nginx配置,可以设定仅允许www域名访问,禁止或重定向裸域名,提升网站品牌统一性及用户体验,设置包括创建针对www的虚拟主机,禁止裸域名访问,并可选进行裸域名到www的301重定向,完成后,重启Nginx服务器使配置生效
    2024-10-10
  • Nginx常用技巧使用实例汇总

    Nginx常用技巧使用实例汇总

    这篇文章主要介绍了Nginx常用技巧使用实例汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 云服务器使用宝塔搭建Python环境,运行django程序

    云服务器使用宝塔搭建Python环境,运行django程序

    本文详细讲解了在云服务器使用宝塔搭建Python环境,运行django程序的方法。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • Nginx ssi合并页面的具体实现

    Nginx ssi合并页面的具体实现

    nginx的ssi模块是一种类似于ASP的基于服务器的网页制作技术,本文主要介绍了Nginx ssi合并页面的具体实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • 详解Nginx搭建图片服务器过程

    详解Nginx搭建图片服务器过程

    本篇文章给大家图文详细讲解了Nginx搭建图片服务器的过程以及中间遇到的问题处理方法,一起跟着小编学习下吧。
    2017-12-12
  • Nginx实现前端灰度发布

    Nginx实现前端灰度发布

    灰度发布是一种重要的策略,它允许我们在不影响所有用户的情况下,逐步推出新功能或更新,通过灰度发布,我们可以测试新版本的稳定性和性能,下面就来介绍一下前端灰度发布的使用,感兴趣的可以了解一下
    2025-03-03

最新评论