Nginx web日志分析

在企业服务器运维中,当 Nginx服务器正常运行后,SA会经常密切关注 Nginx的即时日志,发现有异常的日志信息需要进行及时处理。
Nginx默认日志路径/usr/local/nginx/logs/,其中包含访问日志accesss.log和错误记录日志error. log,查看 Nginx请访同目志cat/usr/local/nginx/logs/access. log,由于我们配置了两个虚拟主机,这两个虚拟主机的日志文件分别为yunwei1.log以及yunwei2.log,查看yunwei1.log日志如下:
Nginx web日志分析_第1张图片
由于记录每一个对第一个虚拟主机的访问,内容会比较多查看error.log,内容如下:

Nginx web日志分析_第2张图片

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

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

$remote_addr:记录客户端IP地址;
$server_name:虚拟主机名称;
$http_x_forward_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:记录客户端浏览器相关信息;
$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访问日志截至目前为止访问量前20的IP列表,代码如下:
    awk‘{print s1}’ access.log | sort luniq-c | sort -nr | head-20
  5. 分析 Nginx访问日志早上9点至中午12点的总请求量,代码如下
    sed -n “/09:00/,/12:00/”p access.log
    awk ‘/09:00/,/12:00/’ yunwei1.log | wc -l
  6. 分析 Nginx访问日志总的独立IP数,代码如下:
    awk ‘{print $1}’ access.log | sort | uniq -c | wc -1
  7. 分析 Nginx访问日志截至目前为止访问量前20的IP列表,代码如下:
    awk ‘{print $1}’ access. log | sort | uniq -c | sort -nr | head -20
  8. 分析 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}’
  9. 分析 Nginx访问日志访问最多的页面,代码如下:
    awk ‘{print $7}’ yunwei1.log | sort | uniq -c | sort -nr | head -20
  10. 分析 Nginx访问日志请求处理时间大于5s的URL,并打印出时间、URL、访客IP,代码如下:
    awk ‘{if ($NF> 5) print $NF, $7, $1}’ access.log | sort -nr | more

你可能感兴趣的:(Nginx web日志分析)