如何分析accesslog

    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