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

当 nginx 在容器里,把 nginx 日志挂载出来的时候,我们发现就不适合再使用 kill -USR1 的方式去分割日志
这时候当然就需要从 nginx 本身配置去解决这个问题了,我们都知道访问日志里面都有一个时间相关的字段,如果我们把这个时间捞出来,这个问题就解决了
我们来看按天生成访问日志

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

查看日志生成的结果

看到日志已经按照我们的需求切割出来了,这个的日志切割可以达到秒级,用法都是一样的,去正则匹配到时间戳就好了。nginx 内置的变量有很多,列如 ${server_name} 这些变量都是可以用来命名日志
当然如果我们需要压缩,就写个对应的定时任务去做压缩就好了,

  1. if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {
  2. set $year $1;
  3. set $month $2;
  4. set $day $3;
  5. }
  6. access_log logs/django.${year}_${month}_${day}_access.log main;

2. 使用 shell 脚本实现

首先来看我的访问日志是没有做任何切割的



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

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

S

我们可以先来手动执行一下脚本看一下效果



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

当然还有最重要的一步,那就是要做好定时任务
  1. 00***/usr/local/nginx/scripts/split.sh

3. 使用 logrotate 来实现

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

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

3.1 查看系统是否已经安装了 logrotate



如上图红框框中,如果 base 前面有个@符号,就表示这个软件已经安装,当然这个只是众多检查方法之一

如果没有安装就安装一下

  1. yum install logrotate -y

安装完成后,自动在/etc/cron.daily/下生成个 logrotate 可执行的脚本文件,此脚本每天都会执行一次

3.2 配置 logrotate

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

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

  1. vim nginx
  2. #########以下为文件配置内容##############
  3. /var/log/nginx/*log # 这里也可以写明对具体哪几个文件进行切割
  4. {
  5. su root root
  6. daily
  7. dateext
  8. missingok
  9. rotate 7
  10. notifempty
  11. compress
  12. create 644 www www
  13. sharedscripts
  14. postrotate
  15. [ -f /usr/local/nginx/logs/nginx.pid ] && kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
  16. endscript
  17. }

我们也可以先手 手动执行一下切割试试看看效果

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

看一下执行之后的结果是不是我们想要的



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

3.3logrotate 配置项详解

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 –>在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行

nginx 的访问日志切割的更多相关文章

  1. Nginx的访问日志配置信息详解

    Nginx的访问日志可以让我们知晓用户的地址,网站的那些部分最受欢迎,以及用户浏览时间等.Nginx会把每个用户的访问日志记录到指定的日志文件中. Nginx主要有两个参数来控制 log_format ...

  2. Linux centos7 VMware Apache访问日志不记录静态文件、访问日志切割、静态元素过期时间

    一.Apache访问日志不记录静态文件 网站大多元素为静态文件,如图片.css.js等,这些元素可以不用记录 vim /usr/local/apache2.4/conf/extra/httpd-vho ...

  3. 使用 awstats 分析 Nginx 的访问日志(IBM)

    前言 在我的上一篇文章<使用 Nginx 提升网站访问速度>中介绍了 Nginx 这个 HTTP 服务器以及如何通过它来加速网站的访问速度.在实际的网站运营中,我们经常需要了解到网站的访问 ...

  4. 使用awstat分析Nginx的访问日志

    在我的上一篇文章<使用 Nginx 提升网站访问速度>中介绍了 Nginx 这个 HTTP 服务器以及如何通过它来加速网站的访问速度.在实际的网站运营中,我们经常需要了解到网站的访问情况, ...

  5. 通过Nginx,Tomcat访问日志(access log)记录请求耗时

    一.Nginx通过$upstream_response_time $request_time统计请求和后台服务响应时间 nginx.conf使用配置方式: log_format main '$remo ...

  6. nginx(tengine)访问日志分片

    说明 nginx日志按天分片是运维的基本要求,不仅可以减小文件大小,方便检索关键数据,也可以定时删除过期的日志.可是nginx和tengine默认并不支持文件分片,因此需要额外处理. 另外,日志分片需 ...

  7. Apache/Nginx/IIS 访问日志详解

    Apache日志详解 1.Apache日志文件名称及所在路径 日志文件一般都是保存在在apache/logs目录下,实际情况可以根据Apache的配置文件去查找日志文件所在的路径. 例如phpstud ...

  8. LNMP配置——Nginx配置 —— Nginx的访问日志

    一.配置 先来看看Nginx的日志格式 #grep -A2 log_format /usr/local/nginx/conf/nginx.conf log_format combined_realip ...

  9. CentOS6.9安装Filebeat监控Nginx的访问日志发送到Kafka

    一.下载地址: 官方:https://www.elastic.co/cn/downloads/beats/filebeat 百度云盘:https://pan.baidu.com/s/1dvhqb0 二 ...

随机推荐

  1. 概A第二章测试

    以下判断题全是(√) 问题 1 得 10 分,满分 10 分                     问题 2 得 10 分,满分 10 分       0-1分布相当于一个特殊的二项分布b(1,p) ...

  2. HUAWEI防火墙双出口据链路带宽负载分担

    组网图形 组网需求 通过配置根据链路带宽负载分担,使流量按照带宽的比例分担到各链路上,保证带宽资源得到充分利用. 如图1所示,企业分别从ISP1和ISP2租用了一条链路,ISP1链路的带宽为100M, ...

  3. 908. Smallest Range I

    Given an array A of integers, for each integer A[i] we may choose any x with -K <= x <= K, and ...

  4. Smith Numbers(分解质因数)

    Smith Numbers Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14173   Accepted: 4838 De ...

  5. C++ 面向对象高级设计

    inline关键字 类声明内定义的函数,自动成为inline函数,类声明外定义的函数,需要加上inline关键字才能成为inline函数 构造函数 应该使用列表初始化 class complex { ...

  6. 软件篇-01-为Jetson TX2扫清科研的障碍

    建议用vryL,GUI界面,功能更全,支持订阅. https://github.com/ShieldQiQi/vryL​github.com 下面的内容不用看了,除非你更喜欢命令行界面.   To r ...

  7. 【VsCode】 实用插件列表

    1.IntelliJ IDEA Keybindings   -IDEA风格的 快捷键,熟悉JetBrain全家桶的不要错过: 2.Vue VSCode Snippets    -写Vue时好用的快捷键 ...

  8. c++ 第三方库收集

    1.boost 这个使用的人多不多说了 2.pthread windows下的posix线程实现 3.libcurl 一个有名的开源网络爬虫库 阿里旺旺中使用到了 4.libeay32 OpenSSL ...

  9. python 自动化审计

    基于python的自动化代码审计 代码审计 逢魔安全实验室   2018-02-11  10,539   本文通过介绍在python开发中经常出现的常规web漏洞,然后通过静态和动态两种方式对pyth ...

  10. Android so加固的简单脱壳

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78077603 Android应用的so库文件的加固一直存在,也比较常见,特地花时间 ...