访问日志主要记录客户端访问Nginx的每一个请求,格式可以自定义。通过访问日志,你可以得到用户地域来源、跳转来源、使用终端、某个URL访问量等相关信息。

Nginx中访问日志相关指令主要有两条,一条是log_format,用来设置日志的格式,另外一条是access_log,用来指定日志文职的存放路径、格式和缓存大小。两条指令在Nginx配置文件中的位置可以在http之间。

日志配置
log_format
log_format用来设置日志格式,格式如下所示

log_format name(名称) format(格式)
在Nginx中有自己默认的日志格式,如下内容:

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
这段内容什么意思呢?我们来理解下。

$remote_addr:客户端的ip地址(如果中间有代理服务器那么这里显示的ip就为代理服务器的ip地址)
$remote_user:用于记录远程客户端的用户名称(一般为“-”)
$time_local:用于记录访问时间和时区
$request:用于记录请求的url以及请求方法
$status:响应状态码
$body_bytes_sent:给客户端发送的文件主体内容大小
$http_referer:可以记录用户是从哪个链接访问过来的
$http_user_agent:用户所使用的代理(一般为浏览器)
$http_x_forwarded_for:可以记录客户端IP,通过代理服务器来记录客户端的ip地址
现在,我们添加一个我们自定义日志信息。例如,如果我们用Nginx作为反向代理服务,就不能获取客户端的真实IP地址IP了,因为经过反向代理后,在客户端和Web服务器之间增加了中间层,因此Web服务器无法直接拿到客户端的IP。

log_format mylog '$remote_addr [$time_local] "$request" $status';
日志格式允许包含的变量注释,如下所示

$remote_addr, $http_x_forwarded_for 记录客户端IP地址
$remote_user 记录客户端用户名称
$request 记录请求的URL和HTTP协议
$status 记录请求状态
$body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
$bytes_sent 发送给客户端的总字节数。
$connection 连接的序列号。
$connection_requests 当前通过一个连接获得的请求数量。
$msec 日志写入时间。单位为秒,精度是毫秒。
$pipe 如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
$http_referer 记录从哪个页面链接访问过来的
$http_user_agent 记录客户端浏览器相关信息
$request_length 请求的长度(包括请求行,请求头和请求正文)。
$request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
$time_iso8601 ISO8601标准格式下的本地时间。
$time_local 通用日志格式下的本地时间。
access_log
用log_format指令设置了日志格式之后,需要用access_log指令指定日志文件存放路径。

格式如下所示

access_log path(存放路径) [format(自定义日志格式名称) [buffer=size | off]]
在Nginx中有自己默认的日志路径,如下内容:

#access_log logs/access.log main;
如果想关闭日志,可以如下:

access_log off;
值得注意的是,Nginx进程设置的用户和组必须对日志路径有创建文件的权限,否则,会报错。

此外,对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭。可以使用open_log_file_cache来设置日志文件缓存(默认是off)。

日志切割
当网站访问量大后,日志数据就会很多,如果全部写到一个日志文件中去,文件会变得越来越大。文件大速度就会慢下来,比如一个文件几百兆。写入日志的时候,会影响操作速度。另外,如果我想看看访问日志,一个几百兆的文件,下载下来打开也很慢。

为了方便对日志进行分析计算,需要对日志进行定时切割。定时切割的方式有按照月切割、按天切割,按小时切割等。最常用的是按天切割。

配置shell脚本
#!/bin/bash
# 设置日志文件存放目录
logs_path="/var/logs/nginx/"
# 设置pid文件
pid_path="/usr/local/dev/nginx/nginx.pid"
# 重命名日志文件
mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").log
# 向nginx主进程发信号重新打开日志
kill -USR1 `cat ${pid_path}`
crontab中设置定时作业
进行编辑

crontab -e
配置内容如下

0 0 * * * bash /usr/local/dev/nginx/nginx_log.sh
这样在每天的夜晚12点就会自动创建备份文件了。.

Nginx日志分割并自动删除日志

#!/bin/bash
# 分割nginx日志脚本

time=`date +%Y%m%d`
logs_path="/usr/local/nginx/logs/"
pid_path="/usr/local/nginx/logs/nginx.pid"

#日志分割,按天创建文件夹
cd $logs_path
website=`ls $logs_path/access_* | xargs -n 1 | cut -f 2 -d "_"`
for i in $website
do
mkdir -p $logs_path/backup/$time/
mv $logs_path/access_$i $logs_path/backup/$time/$i
done
#向nginx主进程发信号重新打开日志
kill -USR1 `cat ${pid_path}`

#每月1日删除所有超过30天日志。
if [ "`date +%d`" = "01" ]; then
all_list=`ls $logs_path/backup | xargs -n 1`
for del in $all_list
do
let results=$time-$del
if [ $results -gt 30 ]; then
rm -rf $logs_path/backup/$del
fi
done
fi

######################################

linux下按照日期进行多个站点nginx日志切割

#!/bin/bash
# fileName:cut_nginx_logs.sh
# create: 2018/07/19
#切割nginx日志(加 & 为后台执行)
# crontab -e
# 0 0 * * * /bin/bash /opt/cut_nginx_logs.sh &
# 注意是用空格分开,不是逗号!!
#多个日志例:arr=(a b c d)
arr=(a)
#nginx安装路径
nginx_dir=/opt/nginx
#nginx日志路径
nginx_log_dir=/opt/nginx/logs
#日志存放路径
save_dir=/opt/trsdata/logs
#当前时间
current_day=$(date +%Y%m%d)
#判断存放路径是否存在,不存在创建
for var in ${arr[@]};
do
if [ ! -d "$save_dir/$var" ]; then
mkdir -p "$save_dir/$var"
fi
#进入log目录
cd $nginx_log_dir
#重命名当前站点日志
mv "$var".access.log "$current_day"_access.log
#移动日志进入指定目录
mv "$current_day"_access.log "$save_dir/$var"
##向 Nginx 主进程发送 USR1 信号。USR1 信号是重新打开日志文件
kill -USR1 $(cat "$nginx_log_dir"/nginx.pid)
#删除30天前的备份
#find "$save_dir/$var" -mtime +30 -name "*.*" -exec rm -rf {} \;
done
bye
EOF

##########################

---------------------
作者:somnus_小凯
来源:CSDN
原文:https://blog.csdn.net/u012486840/article/details/52787264
版权声明:本文为博主原创文章,转载请附上博文链接!

Nginx实战(三) 日志配置与切割的更多相关文章

  1. filebeat获取nginx的access日志配置

    filebeat获取nginx的access日志配置 产生nginx日志的服务器即生产者服务器配置: 拿omp.chinasoft.com举例: .nginx.conf主配置文件添加日志格式 log_ ...

  2. Nginx日志配置与切割

    访问日志主要记录客户端访问Nginx的每一个请求,格式可以自定义.通过访问日志,你可以得到用户地域来源.跳转来源.使用终端.某个URL访问量等相关信息. Nginx中访问日志相关指令主要有两条,一条是 ...

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

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

  4. nginx实战三

    nginx正向代理 https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/z_proxy.md Nginx正向代理使用场景并不多见 ...

  5. Nginx实践:(1) Nginx安装及日志配置

    1. 安装 (1)  Nginx下载地址:https://nginx.org/download/nginx-1.14.0.tar.gz (2)  安装时可能出现依赖库不存在,比如prec包,可以使用y ...

  6. SpringBoot入门 (三) 日志配置

    上一篇博文记录了再springboot项目中读取属性文件中配置的属性,本文学习在springboot项目中记录日志. 日志记录在项目中是很常见的一个功能了,对排查问题有很大帮助,也可以做分类分析及统计 ...

  7. nginx php mysql日志配置

    1.编辑mysql的配置文件my.cnf,这个文件通常在/etc目录下,但我用rpm装mysql的时候这个配置文件是在/usr目录下,但我测试过,无论是放在/etc目录下,还是放在     /usr目 ...

  8. uwsgi+nginx的三种配置方式

    第一种 vi /etc/uwsgi.ini uwsgi --reload uwsgi.pid vi /etc/nginx/conf.d/iot.conf service nginx restart 第 ...

  9. nginx实战(三)之静态资源web服务(跨站访问)

    语法 虽然说浏览器禁止跨站访问以防(CSRF),但出于一些原因还是要进行跨站访问,服务端通过设置头信息Access-Control-Allow-Orign:xxxx,客户端收到后就会允许跨站访问了 实 ...

随机推荐

  1. ACM学习历程—HDU 3092 Least common multiple(数论 && 动态规划 && 大数)

    Description Partychen like to do mathematical problems. One day, when he was doing on a least common ...

  2. 【Lintcode】363.Trapping Rain Water

    题目: Given n non-negative integers representing an elevation map where the width of each bar is 1, co ...

  3. Linux根据端口查看进程

    若不知道具体目录,可以根据端口查找,查看端口22000的信息: sudo lsof -i:22000 RelaySvr 4322 root   13u  IPv4 75680495      0t0  ...

  4. Android audioManager

    Android audioManager AudioManager provides access to volume and ringer mode control. 获取对象 Use Contex ...

  5. 快速搭建SpringBoot项目

    Spring Boot简介: Spring Boot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目.它使用习惯优于配置的理念让你的项目快速运行起来,使用Spring Bo ...

  6. C/C++中变量类型最值之宏定义

    C/C++ [climits(limits.h)] CHAR_BIT        Number of bits for a char object (byte)                    ...

  7. <table>的使用以及确定取消按钮的设置

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. [HDU3037]Saving Beans,插板法+lucas定理

    [基本解题思路] 将n个相同的元素排成一行,n个元素之间出现了(n-1)个空档,现在我们用(m-1)个“档板”插入(n-1)个空档中,就把n个元素隔成有序的m份,每个组依次按组序号分到对应位置的几个元 ...

  9. MQTT,XMPP,STOMP,AMQP,WAMP适用范围优缺点比较

    想要向服务器发送请求并获得响应?直接使用 HTTP 吧!非常简单.但是当需要通过持久的双向连接来通信时,如 WebSockets,当然你也有其它的选择. 这篇文章会简单扼要的解释 MQTT,XMPP, ...

  10. structs2---OGNL表达式

    技术分析之OGNL表达式概述(了解) 1. OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写 * 所谓对象图,即以任意一个对象为根,通过OGNL可 ...