运维之道 | Nginx Web 日志分析

Nginx Web 日志分析

在企业服务器运维中,当 Nginx 服务器正常运行后, SA 会经常密切关注 Nginx 的访问日志,发现有异常的日志信息需要进行及时处理;
Nginx 默认日志路径/usr/local/nginx/logs/,其中包含访问日志 access.log错误记录日志 error.log


一、Nginx 访问日志打印的格式

Nginx 访问日志打印的格式可以自定义,例如 Nginx 日志打印格式配置,log_format 用来设置日志格式,name 为模块名,type 为日志类型,可以配置多个日志模块,分别供不同的虚拟主机日志记录所调用,代码如下

log format main ' $remote_addr - $remote_user [$time_local ]"$request"' 
				' $status $body_bytes_sent "$http_referer"' "$http user_agent" "$http_x_forwarded_for" $request time ', 
192.168.146.132 - - [13/Dec/2019:16:33:33 +0800] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0" "-" GET / HTTP/1.1 time
Nginx 日志格式内部变量及函数参数说明如下:
  • $remote_addr:记录客户端 IP 地址 。
  • $server_name:虚拟主机名称。
  • $http x forwarded for: HTTP 请求端真实的 IP。
  • $remote_user:记录客户端用户名称。
  • $rquest :记录请求的 URL 和 HTTP 协议。
  • $status:记录返回 HTTP 请求的状态。
  • $uptream_status: upstream的状态 。
  • $ssl_protocol: SSL 协议版本 。
  • $body_bytes_sent:发送给客户端的字节数,不包括响应头的大小。
  • $bytes_sent:发送给客户端的总字节数。
  • $connection_requests:当前通过一个连接获得的请求数量。
  • $http_referer:记录从哪个页面链接访问过来的。
  • $http_user_agent:记录客户端浏览器相关信息。
  • $request_length :请求的长度,包括请求行、请求头和请求正文。
  • $msec:日志写入时间。
  • $request_time:请求处理时间,单位为 s,精度为 ms,Nginx 接受用户请求的第一个 字节到发送完响应数据的时间,包括接收请求数据时间、程序响应时间、输出、响应 数据时间。
  • $upstream_response_time:应用程序响应时间,Nginx 向后端服务建立连接开始到 接受完数据然后关闭连接为止的总时间。

二、Web访问信息统计

通过 Nginx 日志,可以简单分析 Web 网站的运行状态数据报表IPUV (独立访问用户数)PV(页面访问量)访问量等需求,以下为常用需求分析:

  • 统计 Nginx 服务器独立 IP 数:
awk '{print $1}' access.log | sort -r | uniq -c | wc -l 
  • 统计 Nginx 服务器总 PV (页面访问量)量:
awk '{print $7}' access.log | wc -l
  • 统计 Nginx 服务器 UV (独立访问用户数)统计:
awk '{print $11}' access.log | sort -r | uniq -c | wc -l
  • 分析 Nginx 访问日志总的独立 IP 数:
awk '{print $1}' access.log | sort | uniq -c | wc -l
  • 分析 Nginx 访问日志截至目前为止访问量前 20 的 IP 列表:
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20
  • 分析 Nginx 访问日志截至目前为止访问量前 20 的 IP 列表:
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20 
  • 分析 Nginx 访问日志状态码 404 、502、503 、500 、499 等错误信息页面,打印错误出现次数大于 20 的 IP 地址:
awk '{ if ($9~/502|499|500|503|404/) print $1,$9 }' access.log|sort|uniq -c |sort -nr |awk '{ if($1>20) print $2 }'
  • 分析 Nginx 访问日志访问最多的页面:
awk '{print $7}' access.log |sort|uniq -c|sort -nr|head -20
  • 分析 Nginx 访问日志请求处理时间大于 5s 的 URL,并打印出时间、 URL、访客 IP:
awk '{if ( $NF > 5) print $NF,$7,$1 }' access.log|sort -nr|more
发布了97 篇原创文章 · 获赞 10 · 访问量 3408

猜你喜欢

转载自blog.csdn.net/VillianTsang/article/details/103527599