Nginx访问日志切割的三种方法

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

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

查看执行后的结果:

nginx日志切割,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} 这些变量都是可以用来命名日志

当然如果我们需要压缩,就写个对应的定时任务去做压缩就好了文章来源地址https://www.toymoban.com/news/detail-625817.html

到了这里,关于Nginx访问日志切割的三种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • centos 重启 nginx 的三种方式

    以上内容转载于ChatGPT中文网,动态生成

    2024年02月10日
    浏览(43)
  • k8s部署nginx的三种方式

    创作时间:2022-08-09 更新时间:2023-03-13 | 更新内容:修改deploy.yaml文件中service对pod的选择label;修改nfs的挂载路径为路径不能为文件,容器挂载路径不能为文件;更新nginx-configmap中default.conf的内容 | 感谢:西瓜蓬蓬 如遇到问题请联系。 使用kubernetes来部署nginx服务,nginx一般是

    2024年02月06日
    浏览(31)
  • Nginx日志管理、Nginx目录索引、Nginx状态监控、Nginx访问控制、访问限制

    目录索引模块简述 ngx_http_autoindex_module 模块处理以斜杠字符 (\\\'/\\\') 结尾的请求,并生成目录列表。 当 ngx_http_index_module 模块找不到索引文件时,通常会将请求传递给ngx_http_autoindex_module 模块。 配置 Nginx 默认是不允许列出整个目录浏览下载。 配置站点目录浏览功能 案例 自定

    2024年02月12日
    浏览(44)
  • nginx访问日志分析

    1、根据访问IP统计UV awk \\\'{print $1}\\\' paycenteraccess.log | sort -n | uniq | wc -l 2、查询访问最频繁的IP(前10) awk \\\'{print $1}\\\' /www/server/nginx/logs/access.txt | sort -n |uniq -c | sort -rn | head -n 10 3、查看某一时间段的IP访问量(1-8点) awk \\\'$2 =\\\"[2023-01-29T11:00:00+08:00]\\\" $2 =\\\"[2023-01-29T11:30:00+08:00]\\\"\\\' /www/server/nginx

    2024年02月10日
    浏览(40)
  • Nginx访问日志及安全巡检统计

        因近期护网要求,为确保本次攻防演练可靠,特对此梳理相关安全巡检及使用命令,供相关需求同学参考! 2.1、pv和uv的区别 PV(Page View访问量/也卖弄浏览数):指在一定统计周期内,用户每次刷新网页一次即计算一次。PV高不一定代表来访者多:PV与来访者的数量成正比

    2024年02月12日
    浏览(32)
  • shell脚本-Nginx访问日志分析

    可以通过/usr/local/nginx/logs/access.log 文件-查看nginx的日志 /usr/local/nginx/conf/nginx.conf 文件-定义了日志输出的格式 可以通过awk命令来取出所需要的数据 Nginx访问日志分析脚本

    2024年02月16日
    浏览(47)
  • Springboot应用中Mybatis输出SQL日志的三种方法

    目录 一、方法一:指定mybatis日志级别 二、方法二:配置mybatis-config.xml 三、方法三:指定整个mapper包下的日志级别

    2024年01月20日
    浏览(38)
  • python字典访问的三种方法的详细用法

    如果想自定义 get() 方法返回的默认值,可以在调用 get() 方法时传入默认值作为参数。示例代码如下:

    2024年02月16日
    浏览(38)
  • 使用Filebeat收集并分析nginx的访问日志

    之前我们已经搞定了nginx+keepalived双机,花了一个多星期时间把业务都迁移过来之后,基本稳定,中间还遇到一次意外宕机,keepalived也顺利做了主备切换,接下来就要做日志分析了。 日志分析,本身从等保的要求就是需要日志第三方存储的,另外就是日志也是分析访问量的一

    2024年02月02日
    浏览(50)
  • 实现计算机间远程桌面访问的三种方法

    下面,我将结合自身实际工作经验,分享三种windows远程桌面访问的方法,解决实际工作场景遇到的远程访问问题。这三种方法分别解决了如下场景下的远程访问: 1. 跨局域网的windows远程桌面访问 2. 同一局域网下的windows远程桌面访问 3. 利用远程控制软件实现远程桌面访问

    2024年02月16日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包