调试运行视频
python调试合集
java web 调试 视频合集
调试asp.net 项目相关合集
php 调试 视频合集
客服微信
客户问答
项目定制说明
作品发货方式
定制毕设需要的时间
成品可以修改吗
关于我们
翰文编程 CSDN博客
代做java毕业设计
信誉保证
购买流程
本站介绍
技术介绍
使用数据库
简单的基于地理图片的旅行路线还原
aScript 垃圾回收
Java中的不可变类
servlet 面试题
开发技术
ABO相关软件文件下载
基于Vue的生活废品回收系统的设计和实现
[免费获取]springboot 专升本志愿填报辅..
如何安装jdk
git 创建新项目,下载工程,合并和更新..
技术应用
ARM在adnroid开发应用
关于mysql
fusionCharts做bi展现基础技术
IoC容器类型
Ioc
移动手机软件的特点
J2ME介绍
手机软件现状
论文指导
广播电视大学论文应用指导要求
毕设题目参考二
毕设题目参考一
论文指导目录
开题报告指导
项目报告
论文开题报告格式
论文撰写的几大模块
当前位置:首页 > 查看
 

nginx自动切割访问日志

 来源:翰文编程 源码设计 定制服务  发布日期: 点击率:

Web 访问日志 (access_log) 记录了所有外部客户端对Web服务器的访问行为,包含了客户端IP,访问日期,访问的URL资源,服务器返回的HTTP状态码等重要信息。
 一条典型的Web访问日志如下:


112.97.37.90 - - [14/Sep/2013:14:37:39 +0800] "GET / HTTP/1.1" 301 5 "-" "Mozilla/5.0 (Linux; U; Android 2.3.6; zh-cn; Lenovo A326 Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MicroMessenger/4.5.1.259" -

 

规划:

1、  要解决问题:

当网站访问量大后,日志数据就会很多,如果全部写到一个日志文件中去,文件会变得越来越大。文件大速度就会慢下来,比如一个文件几百兆。写入日志的时候,会影响操作速度。另外,如果我想看看访问日志,一个几百兆的文件,下载下来打开也很慢。使用第三方免费的日志分析工具-日志宝,可以上传nginx、apache、iis的日志文件,它们帮助分析网站安全方面。毕竟专攻,更加专业。日志宝对上传的文件也是做了大小限制的,不超过50m。

 

2、nignx没有自动分开文件存储日志的机制。由于nginx它不会帮你自动分文件保存。所以,需要自己编写脚本来实现。

 

shell脚本文件nginx_log_division.sh内容如下:

 

# /bin/bash

logs_path="/data/wwwlogs/"

#以前的日志文件。

log_name="xxx.log"  

pid_path="/usr/local/nginx/logs/nginx.pid"

 

mv ${logs_path}${log_name} ${logs_path}${log_name}_$(date --date="LAST   WEEK" +"%Y-%m-d").log

 

kill -USR1 `cat ${pid_path}`

 

上面shell脚本的原理是:先把以前的日志文件移动重命名成一个,目的是就是备份。

按照上个周一的本日来命名,运行脚本的时候时间点是”2013-09-16”,那么生成文件名称是”xxx.log_ 20130909.log”。

在没有执行kill -USR1 `cat ${pid_path}`之前,即便已经对文件执行了mv命令而改变了文件名称,nginx还是会向新命名的文件” xxx.log_ 20130909”照常写入日志数据的。原因在于:linux系统中,内核是根据文件描述符来找文件的。

 

----------------对linux文件描述符的理解

 

文件描述符是linux内核为每个打开的文件命名的一个整数标识。

linux内核为每一个进程生成(或者说维护)一个”文件描述符表”,这个文件描述符表记录的是“此进程所打开的文件(进行标识)”。

在这里的环境中,nginx就是一个运行中的进程,这个进程早就打开了一个日志文件,在文件描述符表是记录了文件的。

即便日志文件的路径改变了,但是还是能够找到(根据文件描述符表可以定位)。

 ----------------------------------------------

当执行命令“kill -USR1 `cat ${pid_path}`”的时候,nginx.pid文件中保存的其实就是一个数字(自己可以打开看一下,我这里是894),nginx 将其主进程的 pid (进程号)写入到了nginx.pid 文件中,所以可以通过cat命令直接拿到其主进程号,直接操作指定的进程号。

 

kill  -USR1 `cat ${pid_path}` 就等同于

kill –USR1 894  #指定发信号(USR1)信号给这个进程编号。

 

在linux系统中,linux是通过信号与”正在运行的进程”进行通信的。linux系统中,也很多预定义好的信号,像SIGHUP。USR1是用户自定义信号。可以理解为:进程自己定义接到这个信号该干嘛(也就是进程编写者自己确定收到这个信号干嘛还是什么都不做都行,完全交给开发人员自己决定)。而在nginx中,它自己编写了代码处理当我接到USR1信号的时候,让nginx重新打开日志文件。具体原理如下:

1、nginx 的主进程收到USR1信号,会重新打开日志文件(以nginx配置文件中的日志名称命名,就是配置文件中access_log项所设置的值,如果文件不存在,会自动创建一个新的文件xxx.log)。

请加微信,客服二维码请咨询购买,同时本程序源码配有系统运行视频 请联系客服索要视频文件


网址:毕设在线毕业设计网 http://www.bisheonline.net

服务范围:定制各类计算机程序设计,vue,jsp ,java 各类框架各类,开发工具 eclipse myeclipse idea vs 等,wap android ssm springboot asp.net php python (爬取,django,flask) vue node.js react ,winform uniapp小程序 等 E-mail:251836457@qq.com

友情链接: 翰文编程 CSDN博客   翰文编程 B站空间   计算机联盟  

翰文编程 源码设计 定制服务 版权所有

辽ICP备12012783


Copyright(C) 毕设在线(bisheonline.net) All Rights Reserved.


客服Q Q:251836457 翰文编程 源码设计 定制服务客服为你服务
360安全网址导航
Baidu