前一段時間,我寫過一篇文章,shell腳本分析 nginx日志訪問次數最多及最耗時的頁面(慢查詢),其中提到了分析耗時頁面重要性。今天主要講的,是通過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</p>
<p>按照空格分隔的話,最後一個字段[0.037] 是頁面執行時間,第7個字段 是頁面訪問地址。
二、執行代碼
復制代碼代碼如下:
awk 'BEGIN{
print "Enter log file:";
getline logs;
#logs="/var/log/nginx/access.log-20101008";
OFMT="%.3f"; </p>
<p>while(getline < logs)
{
split($7,atmp,"?");
aListNum[atmp[1]]+=1;
aListTime[atmp[1]]+=$NF;
ilen++;
}
close(logs);
print "\r\ntotal:",ilen,"\r\n======================================\r\n";
for(k in aListNum)
{
print k,aListNum[k],aListTime[k]/aListNum[k] | "sort -r -n -k3";
} </p>
<p>}'
結果:
性能:
422780條日志,統計完成速度是:5秒左右。