Shell 统计PV, UV ,独立IP

本文介绍如何利用Shell命令快速从Nginx日志中提取PV、UV及独立IP统计数据,通过grep、cut、sort、uniq和wc等工具组合使用,轻松完成网站流量分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每天分析日志的哥们实在伤不起,经常需要给出PV,UV,独立IP等一些统计值,使用C/C++,java都可以写,过程是这样的,先读取文件,逐行扫描,把能标记的值放入数据结构中,排重得出最终结果,其实Linux本身有很强大的文本处理功能,完全可以用shell + 一些文本小工具得出结果。

 

Nngix输出的access log文件如下:

 

 

日志文件代码  收藏代码
  1. 192.168.1.166 - - 119272312 [05/Nov/2011:16:06:59 +0800] "GET /index.html HTTP/1.1" 200 370 "http://192.168.1.201/" "Chrome/15.0.874.106" "-"  
  2. 192.168.1.166 - - 119272312 [05/Nov/2011:16:06:59 +0800] "GET /poweredby.png HTTP/1.1" 200 3034 "http://192.168.1.201/" "Chrome/15.0.874.106" "-"  
  3. 192.168.1.177 - - 1007071650 [05/Nov/2011:16:06:59 +0800] "GET /favicon.ico HTTP/1.1" 404 3650 "-" "Chrome/15.0.874.106" "-"  
  4. 192.168.1.178 - - 58565468 [05/Nov/2011:16:17:40 +0800] "GET / HTTP/1.1" 200 3700 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" "-"  
  5. 192.168.1.166 - - 119272312 [05/Nov/2011:16:17:40 +0800] "GET /nginx-logo.png HTTP/1.1" 200 370 "http://192.168.1.201/" "Chrome/15.0.874.106" "-"  

 

PV很简单,大致就是统计某个URL的访问次数,例如统计/index.html的访问次数

 

Shell代码  收藏代码
  1. grep "/index.html" /var/log/nginx/access.log –c  

 

 

UV呢,我们根据用户标识(第四列) ,首先需要字符串截取,使用cut命令,以空格符号分割,-d “ ”,再取第四列-f 4,然后这里需要排重,需要使用uniq工具,uniq速度很快,但是基于就近排重,前一个后一个一样会排重,之间间隔了不一样的,就不行了,这就必须使用sort工具来对标识符进行排序,排序后再使用uniq工具就可以达到目的,之间我们用管道符号链接, 最后再用 wc –l 输出统计数

 

比如我们统计访问了/index.html这也页面的uv:

 

 

Shell代码  收藏代码
  1. grep "/index.html" /var/log/nginx/access.log | cut –d “ ” –f 4| sort | uniq | wc –l  
 

 

独立IP:

 

假设我们要统计整站的独立IP,那么我们不需要使用grep来匹配具体页面,只需要使用cat输出即可:

 

 

Shell代码  收藏代码
  1. cat /var/log/nginx/access.log | cut –d “ ” –f 1 | sort| uniq | wc -l  

 

都木有使用强大的awk,就完成了基本的统计需求:)

分享到:
### 解析和统计 Nginx 日志文件中的特定域名请 为了实现对 `okgw.fffhhg.com` 域名的请分布进行解析和统计,可以按照以下方法操作: #### 1. 配置 Nginx 的日志格式 默认情况下,Nginx 使用的标准日志格式可能不完全满足需。可以通过修改 `nginx.conf` 文件来定义自定义的日志格式,以便更方便地提取所需据。 以下是常见的日志格式配置示例: ```nginx http { log_format custom '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ' '$host'; server { listen 80; server_name okgw.fffhhg.com; access_log /var/log/nginx/okgw_access.log custom; } } ``` 此配置会记录客户端 IP 地址、时间戳、HTTP 请详情、状态码、响应字节、Referer 和 User-Agent 等信息,并额外增加 `$host` 字段用于区分主机名称[^1]。 #### 2. 提取指定域名的日志条目 假设已经生成了标准的访问日志 `/var/log/nginx/access.log` 或者针对该域名单独保存的日志文件 `/var/log/nginx/okgw_access.log`,可以使用命令行工具过滤出目标域名的相关记录。 利用 Linux Shell 中的 grep 工具快速筛选包含 `okgw.fffhhg.com` 的行: ```bash grep 'okgw\.fffhhg\.com' /var/log/nginx/access.log > filtered_okgw_logs.txt ``` #### 3. 统计 PV (Page Views, 页面浏览量) 页面浏览次是指某个时间段内服务器接收到的所有 HTTP 请。通过 wc 工具计算总行即可得到 PV 值。 ```bash wc -l filtered_okgw_logs.txt ``` #### 4. 计算 UV (Unique Visitors, 独立访客量) 独立访客通常由唯一 IP 地址表示。借助 awk 结合 sort 和 uniq 可以轻松完成去重并统计据。 ```bash awk '{print $1}' filtered_okgw_logs.txt | sort | uniq | wc -l ``` 这里假定每条日志的第一列代表远程用户的 IP 地址 (`$remote_addr`)。 #### 5. 获取独立 IP 列表及其访问频率 如果还需要了解哪些具体 IP 对网站进行了多少次访问,则可进一步扩展处理逻辑如下所示: ```bash awk '{print $1}' filtered_okgw_logs.txt | sort | uniq -c | sort -nr ``` 这一步骤不仅返回唯一的 IP 地址集合,还附带它们各自的出现频次排序结果。 #### 6. 进阶分析——按路径分类汇总 除了基本指标外,还可以深入挖掘不同 URL 路径下的表现情况。例如统计各个 API 接口或者静态资源的实际调用量。 ```bash cut -d'"' -f2 filtered_okgw_logs.txt | cut -d' ' -f2 | sed 's/?.*//' | sort | uniq -c | sort -nr ``` 这条管道链的作用是从原始日志中截取出完整的 URI 部分,去掉查询字符串部分后再做聚合运算得出最终报告。 --- ### 总结 通过对 Nginx 日志文件的有效管理和科学分析,能够全面掌握业务运行状况以及用户体验反馈等方面的信息。以上介绍的方法涵盖了从基础到高级层面的各项技术要点,在实际工作中具有很高的实用价值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值