nginx日志文件的定时切割与归纳
应用环境:生产环境中的Nginx服务器,由于访问日志文件增长速度非常快,日志太大会严重影响服务器效率。同时,为了
方便对日志进行分析计算,须要对日志文件进行定时切割。定时切割的方式有按月切割、按天切割、按小时切割等,
最常用的是按天切割。
切割原理:Nginx不支持像Apache 一样使用cronolog来轮循日志,但是可以用以下方案来实现:
①更改文件名: mv /data/logs/access.log /data/logs/access_2017-12-20.log
②重建access.log文件: kill -USR1 Nginx主进程号 //关于kill -USR1在文章最底处补充说明
通过mv命令将日志文件重命名为/data/logs/access_2017-12-20.log,然后发送kill -USR1信号给Nginx的主进程号,
让Nginx重新生成一个新的日志文件/data/logs/access.log。
新建脚本:
~]# vim /opt/script/nginx_cut_access.sh //假设我在该目录下新建脚本,内容如下:
#!/bin/bash
# Nginx_access按天切割归纳 # Nginx_access日志文件的存放路径
logs_path="/opt/nginx/logs/access/" mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /opt/nginx/logs/nginx.pid`
定时执行:
~]#crontab -e //编辑定时任务,内容如下:
* * * /bin/bash /opt/script/nginx_cut_access.sh
保存,退出;
说明:这个脚本和crontab配置主要实现的功能为:假设今天的日期为2018年1月1日,Nginx当前的日志文件为/opt/nginx/logs/access/access.log,
2018年1月2日的零点(00:00)会执行这个nginx_cut_access.sh脚本,该脚本功能是先创建一个目录/opt/nginx/logs/access/2018/1/,然
后将/opt/nginx/logs/access/access.log文件移动并重命名为/opt/nginx/logs/access/2018/1/access_2018-1-1.log,再发送kill -USR1信号给
Nginx主进程号,告诉Nginx重新生成一个/opt/nginx/logs/access/access.log文件,2018年1月2日的日志记录在这个新生成的日志文件中。
而/opt/nginx/logs/access/2018/1/access_2018-1-1.log文件,就是2018年1月1日的日志文件。
补充:①关于kill USR1
USR1亦通常被用来告知应用程序重载配置文件;例如,向Apache HTTP服务器发送一个USR1信号将导致以下步骤的发生:
停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。
在此例中,在没有执行 kill -USR1 `cat /opt/nginx/logs/nginx.pid` 之前,即便已经对文件执行了mv更名命令,Nginx还是会向新命名
的文件中照常写入日志数据的,原因在于:linux系统中,内核是根据文件描述符来找文件的。
②关于文件描述符
文件描述符是linux内核为每个打开的文件命名的一个整数标识。
Linux内核为每一个进程生成(或者说维护)一个”文件描述符表”,这个文件描述符表记录的是“此进程所打开的文件(进行标识)”。
在这里的环境中,nginx就是一个运行中的进程,这个进程早就打开了一个日志文件,在文件描述符表是记录了文件的,即便日志文件的路径改变了,
但是还是能够找到(根据文件描述符表可以定位)。
在Nginx中,当接收到USR1信号的时候,让Nginx重新打开日志文件,具体原理如下:
1. nginx 的主进程收到USR1信号,会重新打开日志文件(以nginx配置文件中的日志名称命名,就是配置文件中access_log项所设置的值,
如果文件不存在,会自动创建一个新的文件access.log);
2. 然后把日志文件的拥有者改为“工作进程(worker进程)”,目的是让worker进程就具备了对日志文件的读写权限(master和worker通常以
不同用户运行,所以需要改变拥有者);
3. nginx主进程会关闭重名的日志文件(也就是刚才使用mv命令重命名成access_ 2018-1-1.log的文件),并通知工作进程使用新打开的日志
文件(刚才主进程打开的文件access.log)。具体实现上更细化点就是,主进程把USR1信号发给worker,worker接到这个信号后,会重新打开
日志文件(也就是配置文件中约定的access.log);
结束.
nginx日志文件的定时切割与归纳的更多相关文章
- Nginx日志文件配置与切割
Nginx日志的指令主要有两条: log_format,设置日志的格式 access_log,指定日志文件的存放路径.格式和缓存大小 两条指令在Nginx配置文件中的位置可以在http{……..}之间 ...
- nginx日志文件切割
#!/bin/bash #脚本对日志文件进行切割 #脚本需要crontab 每天定时执行 #Nginx 日志文件的存放路径 logs_path="/../logs/" mkdir ...
- 如何对Nginx日志文件进行切割保存
日积月累下,日志文件会越来越大,日志文件太大严重影响服务器效率,须要定时对日志文件进行切割. 切割的方式有按月切割.按天切割.按小时切割,一般都是按天切割. 那么如何进行切割呢? 思路: 创建日志文件 ...
- Nginx 日志文件切割
Nginx 是一个非常轻量的 Web 服务器,体积小.性能高.速度快等诸多优点.但不足的是也存在缺点,比如其产生的访问日志文件一直就是一个,不会自动地进行切割,如果访问量很大的话,将 导致日志文件容量 ...
- 转:Nginx 日志文件切割
http://www.cnblogs.com/benio/archive/2010/10/13/1849935.html 偶然发现access.log有21G大,所以将其切割. Nginx 是一个非常 ...
- 使用logrotate管理nginx日志文件
本文转载自:http://linux008.blog.51cto.com/2837805/555829 描述:linux日志文件如果不定期清理,会填满整个磁盘.这样会很危险,因此日志管理是系统管理员日 ...
- nginx(四)初识nginx日志文件
nginx 日志相关指令主要有两条,一条是log_format,用来设置日志格式,另外一条是access_log,用来指定日志文件的存放路径.格式和缓存大小,通俗的理解就是先用log_format来定 ...
- apache与nginx日志文件的区别(转载)
apache与nginx日志文件的区别 转载:http://www.xfcodes.com/apache/log/3270.htm 导读:apache与nginx日志文件的区别,在apache与ngi ...
- nginx日志按天自动切割
1.编写shell脚本,创建nginx_log.sh文件#!/bin/bashsource /etc/profile#设置Nginx日志文件存放目录log_path="/usr/local/ ...
随机推荐
- Git分支合并:Merge、Rebase的选择
git代码合并:Merge.Rebase的选择 - iTech - 博客园http://www.cnblogs.com/itech/p/5188932.html Git如何将一个分支的修改同步到另一个 ...
- C#设计模式之1:策略模式
首先需要说明的是该系列的所有内容都是基于headfirst设计模式来描述的.因为我之前也看过不少关于设计模式的书,还是发现这本最好,因为这本书里面给出的例子是最贴切实际的.不说了,开始这个系列吧! 策 ...
- Java Hash集合的equals()与hashCode() 方法
Java 集合实现类,无论是HashSet.HashMap等所有的Hash算法实现的集合类(后面简称Hash集合),加入的对象必须实现 hashCode() 与 equals() 方法,稍微不同的地方 ...
- 使用docker化的nginx 反向代理 docker化的GSCloud 的方法
1. 首先将nginx 的image pull 下来. docker pull nginx 2. 将最近的可用的 参数文件 复制过来当一个目录 mkdir /nginx ssh root@linuxs ...
- CodeForces 113B Petr#
题目链接:http://codeforces.com/problemset/problem/113/B 题目大意: 多组数据每组给定3个字符串T,Sbeg,Sed,求字符串T中有多少子串是以Sbeg开 ...
- Python OpenCV人脸识别案例
■环境 Python 3.6.0 Pycharm 2017.1.3 ■库.库的版本 OpenCV 3.4.1 (cp36) ■haarcascades下载 https://github.com/ope ...
- group by具有去重的功能
group by具有去重的功能
- React 设计模式 --- Container and Presentational pattern(容器和展示组件分离)
在React开发中,一个典型的React组件通常会混杂着逻辑操作部分和展示部分.逻辑操作部分指的是和页面UI无关的内容,如API的调用,数据的处理,事件处理函数. 展示部分则指的是创建页面UI 的内容 ...
- codeforces231C
To Add or Not to Add CodeForces - 231C A piece of paper contains an array of n integers a1, a2, ..., ...
- Nginx 如何通过连接池处理网络请求
L:35-36 worker_connections 默认 512个 这个链接需要设置的 worker_cpu_affinity 0001 0010 0100 1000;关联CPU connecti ...