zoukankan      html  css  js  c++  java
  • awk 分析web日志(页面执行时间)

    shell脚本分析 nginx日志访问次数最多及最耗时的页面(慢查询)
    当服务器压力比较大,跑起来很费力时候。我们经常做站点页面优化,会去查找那些页面访问次数比较多,而且比较费时。 找到那些访问次数高,并且比较耗时的地址,就行相关优化,会取得立竿见影的效果的。 下面是我在做优化时候,经常用到的一段shell 脚本。 这个也可以算是,统计web页面的slowpage 慢访问页面,象mysql slowquery 。
     
    以下是我的:nginx 配制
     

    log_format main '$remote_addr - $remote_user [$time_local] $request '
    '"$status" $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for" $request_time';
    access_log /var/log/nginx/access.log main buffer=32k;

     
     
    从上面配置,可以看到:ip在 第一列,页面耗时是在最后一列,中间用空格分隔。 因此在awk 中,分别可以用:$1
    $NF 读取到当前值。 其中NF是常量,代表整个列数。
    通过awk分析日志,快捷得到执行时间
     
    一、web日志文件格式

    222.83.181.42 - - [09/Oct/2010:04:04:03 +0800] GET /pages/international/tejia.php HTTP/1.1 "200" 15708 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Sicent; WoShiHoney.B; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" "-" 0.037
    按照空格分隔的话,最后一个字段[0.037] 是页面执行时间,第7个字段 是页面访问地址。

     
    二、执行代码
     

    awk 'BEGIN{
    print "Enter log file:";
    getline logs;
    #logs="/var/log/nginx/access.log-20101008";
    OFMT="%.3f";
    while(getline < logs)
    {
    split($7,atmp,"?");
    aListNum[atmp[1]]+=1;
    aListTime[atmp[1]]+=$NF;
    ilen++;
    }
    close(logs);
    print " total:",ilen," ====================================== ";
    for(k in aListNum)
    {
    print k,aListNum[k],aListTime[k]/aListNum[k] | "sort -r -n -k3";
    }
    }'

     
     
     
     
     
    结果:
    性能:
    422780条日志,统计完成速度是:5秒左右。
  • 相关阅读:
    XML 命名空间
    XML Schema验证
    java 解析XML文档
    Java线程:创建与启动
    CCF-CSP 201312-5 I'm stuck !
    memset函数用法
    C++的字符串多行输入
    OS复习1
    os复习2
    javamail编程2
  • 原文地址:https://www.cnblogs.com/gzliuc/p/5918220.html
Copyright © 2011-2022 走看看