- accesslog是apache或者nginx等web service生成的日志,对应于网页的每一次请求,包含有大量的信息,分析好accesslog可以对网站的运行情况有一个整体的认识,在出现问题的情况下,也可以通过对accesslog的数据分析结果,大致定位出问题所在。负责网站的运维、架构相关的工程师需要对accesslog非常熟悉,策略效果相关的工程师也可以通过对accesslog的分析,得到用户的行为数据。
- 同时分析accesslog的日志也可以估算出用户访问量,高峰访问时间段,区域访问数据等,为性能测试和服务器扩展提供很好的数据参考
accesslog的组成
- 一条典型的accesslog
101.226.166.254 - - [21/Oct/2013:20:34:28 +0800] "
GET /movie_cat.php?year=2013 HTTP/1.1"
200 5209 "http://www.baidu.com"
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1;
Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729;
.NET CLR 3.0.30729; Media Center PC 6.0; MDDR; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322; Tablet PC 2.0);
360Spider"
下面我们来说说这一行记录的意思:
- 101.226.166.254:(用户IP)
- [21/Oct/2013:20:34:28 +0800]:(访问时间)
- GET:http请求方式,有GET和POST两种
- /movie_cat.php?year=2013:当前访问的网页是动态网页,movie_cat.php即请求的后台接口,year=2013为具体接口的参数
- 200:服务状态,200表示正常,常见的还有,301永久重定向、4XX表示请求出错、5XX服务器内部错误
- 5209:传送字节数为5209,单位为byte
- "http://www.baidu.com":refer:即当前页面的上一个网页
- "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDR; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322; Tablet PC 2.0); 360Spider": agent字段:通常用来记录操作系统、浏览器版本、浏览器内核等信息
数据统计及分析
- 接口请求频次:分接口、按天和小时分别统计。了解网站的运行情况,每个接口的请求频次,用户的行为习惯等。
- 响应时间:一天的平均响应时间、分接口的平均响应时间、分接口按小时统计平均响应时间。响应时间过长的请求可能说明服务性能上存在缺陷,就需要对相应的接口进行优化了。
- 异常分析:状态码非200的请求、响应时间超过一定域值的请求。大量的404不利用SEO,应该尽量避免。
- 具体参数统计:对于动态页面,一个接口通常带有多个参数,其中某个或者某几个参数特别重要,可以进一步细化,产生接口对应的参数的统计结果
- ip来源的统计:可以统计出网页访问的ip来源,进一步通过ip定位,可以产生网站按地域的访问情况,同时对ip的统计,也可以对一些可能的攻击或者黑客行为进行识别。
- 蜘蛛抓取情况分析:搜索引擎的蜘蛛通常会设置agent字段,通过分析agent字段,可以得到网站一天被百度、谷歌等搜索引擎抓取的次数,以及哪些网页经常被spider爬过,这也是SEO的基础。
accesslog的shell 脚本分析
- 查看80端口的tcp连接
netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l
- 当前WEB服务器中联接次数最多的ip地址:
netstat -ntu |awk ‘{print $5}‘ |sort | uniq -c| sort -n -r
231 ::ffff:127.0.0.1:8095
23 ::ffff:192.168.50.201:5432
2 ::ffff:192.168.50.203:80
1 servers)
1 ::ffff:192.168.50.56:43314
1 ::ffff:192.168.50.21:2996
1 ::ffff:192.168.50.21:2989
1 ::ffff:192.168.50.200:8060
1 ::ffff:192.168.50.12:1300
1 ::ffff:192.168.50.12:1299
1 ::ffff:192.168.50.12:1298
1 ::ffff:127.0.0.1:57933
1 Address
1 192.168.50.41:65310
1 192.168.50.41:64949
1 192.168.50.41:49653
- 查看日志中访问次数最多的前10个IP
cat access_log |cut -d ‘ ‘ -f 1 |sort |uniq -c | sort -nr | awk ‘{print $0 }‘ | head -n 10 |less
14085 121.207.252.122
13753 218.66.36.119
11069 220.162.237.6
1188 59.63.158.118
1025 ::1
728 220.231.141.28
655 114.80.126.139
397 117.25.55.100
374 222.76.112.211
348 120.6.214.70
- 查看日志中出现100次以上的IP
cat access_log |cut -d ‘ ‘ -f 1 |sort |uniq -c | awk ‘{if ($1 > 100) print $0}‘|sort -nr |less
14085 121.207.252.122
13753 218.66.36.119
11069 220.162.237.6
1188 59.63.158.118
1025 ::1
728 220.231.141.28
655 114.80.126.139
397 117.25.55.100
374 222.76.112.211
348 120.6.214.70
252 58.211.82.150
252 159.226.126.21
206 121.204.57.94
192 59.61.111.58
186 218.85.73.40
145 221.231.139.30
134 121.14.148.220
123 222.246.128.220
122 61.147.123.46
119 121.204.105.58
107 116.9.75.237
105 118.123.5.173
.....
- 查看某一天的访问量
cat access_log|grep ‘12/Nov/2012‘|grep "******.htm"|wc|awk ‘{print $1}‘|uniq
- 查看访问时间超过30ms的url列表
cat access_log|awk ‘($NF > 30){print $7}’|sort -n|uniq -c|sort -nr|head -20
- 列出响应时间超过60m的url列表并统计出现次数
cat access_log |awk ‘($NF > 60 && $7~/\.php/){print $7}’|sort -n|uniq -c|sort -nr|head -100
- 统计/index.[html]页面的访问uv
grep "/index.html" access.log | cut –d “ ” –f 4| sort | uniq | wc –l
- PV
grep "/index.html" access.log | wc -l
ip、uv和pv的定义
- IP(独立IP): 即Internet Protocol,指独立IP数。00:00-24:00内相同IP地址只被计算一次。
- PV(访问量): 即Page View, 即页面浏览量或点击量,用户每次刷新即被计算一次。
- UV(独立访客):即Unique Visitor,访问您网站的一台电脑客户端为一个访客。00:00-24:00内相同的客户端只被计算一次。
ip,pv,uv的区别
- IP(独立IP):某IP地址的计算机访问网站的次数。这种统计方式很容易实现,具有真实性。所以是衡量网站流量的重要指标。
- PV(访问量):PV反映的是浏览某网站的页面数,所以每刷新一次也算一次。就是说PV与来访者的数量成正比,但PV并不是页面的来访者数量,而是网站被访问的页面数量。
- UV(独立访客):可以理解成访问某网站的电脑的数量。网站判断来访电脑的身份是通过来访电脑的cookies实现的。如果更换了IP后但不清除cookies,再访问相同网站,该网站的统计中UV数是不变的。
举例以说明:
- 甲乙丙三人某台通过ADSL的电脑,访问了“goto52”这个网站,并且每人各浏览了2个页面,那么网站的流量统计是:
- IP(独立IP):1
- PV(访问量):6(3人乘以2个页面)
- UV(独立访客):1
- 若三人都是更换了IP(ADSL重新拨号)后各浏览了2个页面,则
- IP(独立IP):3
- PV(访问量):6
- UV(独立访客):1
- 所以,IP(独立IP)反映的是网络地址对象的数量,UV(独立访客)反映的是实际使用者的数量,每个UV相对于每个ip更准确地对应一个实际的浏览者。