在当今数字化时代,网站流量分析对于理解用户行为、优化网站性能以及制定营销策略至关重要。本文将探讨如何通过分析 Nginx 的 access_log 获取网站流量的多维度数据,并给出具体操作步骤和分析方法。
日志格式 {#日志格式}
在开始分析前,我们需要了解 access_log 的默认日志格式。通常情况 access_log 的日志格式如下:
|---------------|-------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3
| log_format combined '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
|
这个格式包含以下字段:
| 字段 | 说明 | |------------------|------------------------| | $remote_addr | 客户端 IP 地址 | | $remote_user | 客户端用户名 | | $time_local | 本地时间 | | $request | 请求方法、请求 URI 以及 HTTP 版本 | | $status | HTTP 状态码 | | $body_bytes_sent | 发送给客户端的字节数 | | $http_referer | 请求来源的 URL | | $http_user_agent | 客户端浏览器的用户代理字符串 |
Nginx 访问量分析 {#Nginx-访问量分析}
要统计网站的总访问量,可通过计算 access_log 文件的行数来实现。在 Linux 系统中可以使用 wc -l
命令,该命令会输出 access.log
文件的行数,即为网站总访问量:
|-----------|--------------------------|
| 1
| wc -l access.log
|
了解访问量在不同时间段的分布情况,有助于我们发现网站访问高峰和低谷。可以使用 awk
命令按小时或分钟统计请求数,下面的命令会输出按小时或分钟统计的请求数,并且显示请求数最多的前 100
个时间点:
|-----------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4
| # 每小时统计请求数 awk '{print $4}' access.log | cut -c 14-15 | sort | uniq -c | sort -nr | head -n 100 # 每分钟统计请求数 awk '{print $4}' access.log | cut -c 14-18 | sort | uniq -c | sort -nr | head -n 100
|
访问来源分析 {#访问来源分析}
分析访问来源 IP 可以了解用户主要来自哪些地区或网络环境。使用 awk
和 sort
命令可以统计访问量最多的 IP 地址,该命令会输出访问量最多的前 10
个 IP 地址及其访问次数:
|-----------|------------------------------------------------------------------------------|
| 1
| awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10
|
查看访问来源 URL 有助于我们了解用户是如何找到我们网站的。可以使用以下命令统计访问来源最多的 URL,该命令会输出访问来源最多的前 10
个 URL 及访问次数:
|-----------|-------------------------------------------------------------------------------|
| 1
| awk '{print $11}' access.log | sort | uniq -c | sort -nr | head -n 10
|
页面访问分析 {#页面访问分析}
了解哪些页面访问量最高可帮助我们优化这些页面的性能和内容。使用 awk
命令可统计访问最频繁的页面,下面命令会输出访问最频繁的前 100
个页面及其访问次数:
|-----------|-------------------------------------------------------------------------------|
| 1
| awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -n 100
|
分析页面的访问时间可以发现哪些页面的加载时间较长,需要优化。在 Nginx 的 log_format
中加入 $request_time
字段,然后使用以下命令列出传输时间超过 3
秒页面,该命令会输出传输时间超过 3
秒的页面及其出现的次数,仅显示前 20
条记录:
|-----------|----------------------------------------------------------------------------------------------|
| 1
| cat access.log | awk '($NF > 3){print $7}' | sort -n | uniq -c | sort -nr | head -20
|
用户行为分析 {#用户行为分析}
分析用户代理字符串可以了解用户使用的浏览器类型和版本。使用 awk
命令可统计不同浏览器的访问次数,该命令会输出不同浏览器访问次数及其用户代理字符串:
|-----------|-------------------------------------------------------------------------------------|
| 1
| awk -F '"' '{print $6}' access.log | sort | uniq -c | sort -nr | head -n 10
|
通过分析用户的访问路径可以了解用户在网站中的导航行为。可以使用以下命令统计访问路径的长度和频率,该命令会输出访问路径的长度及其出现的次数,仅显示前 10
条记录:
|-----------|----------------------------------------------------------------------------------------------------------|
| 1
| awk '{print $7}' access.log | awk -F '/' '{print NF-1}' | sort | uniq -c | sort -nr | head -n 10
|
性能分析 {#性能分析}
响应时间是衡量网站性能的重要指标之一。可使用以下命令统计响应时间的分布情况,该命令会输出响应时间及其出现次数,仅显示前 10
条记录:
|-----------|----------------------------------------------------------------------------------|
| 1
| awk '{print $NF}' access.log | sort -n | uniq -c | sort -nr | head -n 10
|
HTTP 状态码反映了请求的成功与否以及错误类型。可以使用以下命令统计不同状态码的出现次数,该命令会输出不同状态码及其出现的次数,仅显示前 10 条记录:
|-----------|------------------------------------------------------------------------------|
| 1
| awk '{print $9}' access.log | sort | uniq -c | sort -nr | head -n 10
|