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秒左右。
  • 相关阅读:
    【BZOJ-4289】Tax 最短路 + 技巧建图
    【BZOJ-3895】取石子 记忆化搜索 + 博弈
    【BZOJ-4569】萌萌哒 ST表 + 并查集
    【BZOJ-3832】Rally 拓扑序 + 线段树 (神思路题!)
    【BZOJ-4213】贪吃蛇 有上下界的费用流
    【BZOJ-3122】随机数生成器 BSGS
    【BZOJ-2299】向量 裴蜀定理 + 最大公约数
    【BZOJ-1441】Min 裴蜀定理 + 最大公约数
    【BZOJ-2438】杀人游戏 Tarjan + 缩点 + 概率
    【BZOJ-4310】跳蚤 后缀数组 + ST表 + 二分
  • 原文地址:https://www.cnblogs.com/gzliuc/p/5918220.html
Copyright © 2011-2022 走看看