概述
目录:
- 日志分析
- 日志的常用需求分析
- 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)访问量等需求
- 统计 Nginx 服务器独立 IP 数。
[root@cacti logs]# awk '{print $1}' access.log | sort -r | uniq -c | wc -l
713739
- 统计 Nginx 服务器总 PV 量。
[root@linux-node2 ~]# awk '{print $7}' access.log | wc -l
130586
- 统计 Nginx 服务器 UV 统计
[root@linux-node2 ~]# awk '{print $11}' access.log | sort -r| uniq -c | wc -l
10
- 分析 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
- 分析 Nginx 访问日志早上 9 点至中午 12 点的总请求量
[root@linux-node2 ~]# awk '/2019:00:00/,/2019:12:00/' access.log | wc -l
27008
- 分析 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}'
- 分析 Nginx 访问日志访问最多的页面。
[root@linux-node2 ~]# awk '{print $7}' access.log |sort |uniq -c|sort -nr|head -20
- 分析 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 "