删除web日志文件后需要重载配置才会重新生成web日志文件

一、内部变量和参数介绍

Nginx默认日志路径/usr/local/nginx/logs/,其中包含访问日志accesss.log和错误记录日志error. log,查看Nginx请访问日志cat /usr/local/nginx/logs/access. log。
Nginx访问日志打印的格式可以自定义,例如 Nginx日志打印格式配置, log_format用来设置日志格式,name为模块名,type为日志类型,可以配置多个日志模块,分别供不同的虚拟主机日志记录所调用。

$remote_addr:  记录客户端IP地址
$server_name:  虚拟主机名称
$http_x_forward_for : Http请求端真实的IP
$remote_user:  记录客户端用户名称
$request:  记录请求的URL和HTTP协议
$status:  记录返回HTTP请求的状态
$uptream_status: upstream的状态
$body_bytes_sent: 发送给客户端的字节数,不包括响应头的大小
$connection_requests:  当前通过一个连接获得的请求数量
$http_referer:  记录从哪个页面链接访问过来的
$http_user_agent: 记录客户端浏览器相关信息
$msec;日志写入时间
$request_length请求的长度,包括请求行、请求头和请求正文
$request_time:  请求处理时间,单位为s,精度为ms, Nginx接受用户请求的第一个字节到发送完响应数据的时间,包括接收请求数据时间、程序响应时间,输出、响应数据时间
$upstream_response_time:应用程序响应时间, Nginx向后端服务建立连接开始到接受完数据然后关闭连接为止的总时间

二、对日志的分析

通过 Nginx日志,可以简单分析Web网站的运行状态、数据报表,IP,UV( uniquePV(page view)访问量等需求。

(1) 统计Nginx服务器独立IP数,测试可行指令如下:

awk '{print $1}' access.log | sort -r | uniq -c | wc -l

(2)统计 Nginx服务器总PV量,测试可行指令如下:

awk '{print $7}' access.log | wc -l

(3)Nginx服务器UV统计,测试可行指令如下:

awk '{print $11}' access.log | sort -r | uniq -c | wc -l

(4)分析 Nginx访问日志截至目前为止访问量前n列的IP,测试可行指令如下:

cat cloudduo.log | cut -d ' ' -f 1 | sort | uniq -c | sort -nr | awk '{print $0}' | head -n 10

(5)分析 Nginx访问日志早上8点至中午12点的总请求量,指令如下:

awk '/08:00/,/12:00/' test.log | wc -l

(6)分析 Nginx访问日志总的独立IP数,测试可行指令如下:

awk '{print $1}' access.log | sort | uniq -c | wc -l

(7)分析 Nginx访问日志状态码404、502、503、500、499等错误信息页面,打印错误出现次数大于20的IP地址,指令如下:

awk ' {if ($9~/404|499|500|502|403/) print $1, $9)' , access.log | sort | uniq -c | sort -nr | awk '{if($1>20) print $2}'

(8)分析 Nginx访问日志访问最多的页面,前20个页面,测试可行指令如下:

awk '{print $7}' access.log |sort |uniq -c|sort -nr|head -20

(9)分析 Nginx访问日志请求处理时间大于5s的URL,并打印出时间、URL、访客IP,测试可行指令如下:

awk  '{if ($NF> 5)  print  $NF, $7, $1}'  access.log | sort -nr | more

可以使用一个类似于下面的脚本来实现统计全部流量占用并在达到一定阈值时停止nginx服务

#!/bin/bash

# 获取Nginx进程ID
nginx_pid=$(ps -ef | grep "nginx: master process" | grep -v grep | awk '{print $2}')

# 获取Nginx访问日志路径
log_file="/var/log/nginx/access.log"

# 设置阈值为950G,单位为字节
threshold=$((950*1024*1024*1024))

# 统计当前已经使用的流量
current_traffic=$(du -b $log_file | awk '{print $1}')

if [ $current_traffic -gt $threshold ]; then
    # 停止Nginx服务
    kill $nginx_pid
    echo "Nginx service has been stopped due to excessive traffic usage."
fi

这个脚本首先获取Nginx的进程ID,然后获取Nginx访问日志的路径和阈值,统计当前已经使用的流量并和阈值比较。如果当前已经使用的流量超过阈值,则停止Nginx服务。可以将该脚本设置为定时任务,以便定期检查和处理流量过高的情况。