我是靠谱客的博主 鲤鱼路灯,最近开发中收集的这篇文章主要介绍Nginx 日志分析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录:

  1. 日志分析
  2. 日志的常用需求分析
  3. Nginx 日志切割

日志分析

Nginx 默认日志路径/usr/local/nginx/logs/,其中包含访问日志 access.log 和错误 记 录 日 志 error.log。
查看 nginx 访问日志 :

cat /usr/local/nginx/logs/access.log | more

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"	$request_time';

Nginx 日志格式内部变量及函数参数说明:

$remote_addr	记录客户端 IP 地址;

$server_name	虚拟主机名称;

$http_x_forwarded_for	HTTP 的请求端真实的 IP;

$remote_user	记录客户端用户名称;

$request	记录请求的 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	请求处理时间,单位为秒,精度毫秒,Nginx 接受用户请求的第一个字节到发送完响应数据的时间,包括:接收请求数据时间、程序响应时间、输出、响应数据时间。

$upstream_response_time 应用程序响应时间,Nginx 向后端服务建立连接开始到接受完数据然后关闭连接为止的总时间。

回到目录



日志的常用需求分析

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

  1. 统计 Nginx 服务器独立 IP 数。
[root@cacti logs]# awk '{print $1}' access.log | sort -r | uniq -c | wc -l
713739
  1. 统计 Nginx 服务器总 PV 量。
[root@linux-node2 ~]# awk '{print $7}' access.log | wc -l
130586
  1. 统计 Nginx 服务器 UV 统计
[root@linux-node2 ~]# awk '{print $11}' access.log | sort -r| uniq -c | wc -l
10
  1. 分析 Nginx 访问日志截止目前为止访问量前 20 的 IP 列表。
[root@linux-node2 ~]# awk '{print$1}' access.log | sort | uniq -c | sort -nr |head -20
  88466 10.0.0.5
  17441 192.168.5.252
   5431 119.130.230.101
   2446 119.130.229.217
   2142 192.168.40.83
   1238 192.168.40.238
   1129 192.168.40.232
   1065 192.168.40.118
    663 192.168.40.88
    528 192.168.40.153
    517 192.168.40.146
    510 192.168.40.134
    474 192.168.40.124
    450 192.168.40.73
    414 192.168.40.200
    333 192.168.40.164
    321 192.168.40.177
    318 73.171.171.150
    306 192.168.40.81
    306 192.168.40.116
  1. 分析 Nginx 访问日志早上 9 点至中午 12 点的总请求量
[root@linux-node2 ~]# awk '/2019:00:00/,/2019:12:00/' access.log | wc -l
27008
  1. 分析 Nginx 访问日志状态码 404、502、503、500、499 等错误信息页面,打印错误出现次数大于 20 的 IP 地址。
[root@linux-node2 ~]# awk '{if ($12~/502|499|500|503|404/) print $1,$12}' access.log |sort |uniq -c|sort -nr | awk '{if($1>20) print $2}'
  1. 分析 Nginx 访问日志访问最多的页面。
[root@linux-node2 ~]# awk '{print $7}' access.log |sort |uniq -c|sort -nr|head -20
  1. 分析 Nginx 访问日志请求处理时间大于 5 秒的 URL,并打印出时间、URL、访客IP
[root@linux-node2 ~]# awk '{if ($(NF-4)>5) print $(NF-4),$7,$1}' access.log|sort -nr|more

回到目录



Nginx 日志切割

示例:vim /data/sh/auto_nginx_log.sh

#!/bin/bash
#
#auto mv nginx log shell

S_LOG=/usr/local/nginx/logs/access.log
D_LOG=/data/backup/`date +%Y%m%d`

echo -e "33[32mPlease wait start cut shell scripts...33[1m" sleep 2

if [ ! -d $D_LOG ];then
mkdir -p $D_LOG
fi

mv $S_LOG $D_LOG

kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

echo "------------------------------------"

echo "The Nginx log Cutting Successfully!"

echo "You can access backup nginx log $D_LOG/access.log files."

在/var/spool/cron/root 中添加

0	0	*	*	*	/bin/sh	/data/sh/auto_nginx_log.sh >>/tmp/nginx_cut.log 2>&1

回到目录

最后

以上就是鲤鱼路灯为你收集整理的Nginx 日志分析的全部内容,希望文章能够帮你解决Nginx 日志分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(78)

评论列表共有 0 条评论

立即
投稿
返回
顶部