shell统计pv和uv、独立ip的方法
程序员文章站
2023-11-22 10:15:46
每天分析日志的哥们实在伤不起,经常需要给出pv,uv,独立ip等一些统计值,使用c/c++,java都可以写,过程是这样的,先读取文件,逐行扫描,把能标记的值放入数据结构中...
每天分析日志的哥们实在伤不起,经常需要给出pv,uv,独立ip等一些统计值,使用c/c++,java都可以写,过程是这样的,先读取文件,逐行扫描,把能标记的值放入数据结构中,排重得出最终结果,其实linux本身有很强大的文本处理功能,完全可以用shell + 一些文本小工具得出结果。
nngix输出的access log文件如下:
日志文件代码
复制代码 代码如下:
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" "-"
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" "-"
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" "-"
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)" "-"
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的访问次数
复制代码 代码如下:
grep "/index.html" /var/log/nginx/access.log –c
uv呢,我们根据用户标识(第四列) ,首先需要字符串截取,使用cut命令,以空格符号分割,-d “ ”, 再取第四列-f 4,然后这里需要排重,需要使用uniq工具,uniq速度很快,但是基于就近排重,前一个后一个一样会排重,之间间隔了不一样的,就不行了,这就必须使用sort工具来对标识符进行排序,排序后再使用uniq工具就可以达到目的,之间我们用管道符号链接, 最后再用 wc –l 输出统计数
比如我们统计访问了/index.html这也页面的uv:
复制代码 代码如下:
grep "/index.html" /var/log/nginx/access.log | cut –d “ ” –f 4| sort | uniq | wc –l
独立ip:
假设我们要统计整站的独立ip,那么我们不需要使用 grep来匹配具体页面,只需要使用cat输出即可:
复制代码 代码如下:
cat /var/log/nginx/access.log | cut –d “ ” –f 1 | sort| uniq | wc -l
都木有使用强大的awk,就完成了基本的统计需求:)
推荐阅读
-
shell统计pv和uv、独立ip的方法
-
shell统计pv和uv、独立ip的方法
-
关于access_log 日志文件以及ip、uv和pv的定义
-
详解NGINX如何统计网站的PV、UV、独立IP
-
Linux Shell中curl和wget使用代理IP的方法教程
-
Linux Shell中curl和wget使用代理IP的方法教程
-
php实现从本网站每天出站连接向目标网站贡献的IP和PV的统计
-
php实现从本网站每天出站连接向目标网站贡献的IP和PV的统计
-
php实现从本网站每天出站连接向目标网站贡献的IP和PV的统计_PHP教程
-
php实现从本网站每天出站连接向目标网站贡献的IP和PV的统计_PHP教程