AWK應用之統計訪問日誌
Nginx和Apache都支援訪問日誌,可以記錄頁面請求的時間
統計頁面的訪問時間,可以作為調優的一種依據.
實驗模擬Nginx的訪問日誌,統計頁面訪問的各項數值.
首先建立模擬資料
create table t
select
concat('/cms/',ceil(rand()*5),'.html') path,
now()-interval id+ceil(rand()*60) minute createtime,
ceil(rand()*100) ts
from nums where id<30;
其中nums是數字輔助表,參見
http://blog.itpub.net/29254281/viewspace-1362897/
將資料匯出為文字,模擬訪問日誌
select * from t into outfile '/tmp/log.txt';
資料如下,分別是訪問的頁面,訪問時間和訪問時長
1.統計訪問總時長(sum)
awk '{a[$1]+=$4} END{for (i in a) printf("%10s %5d\n",i,a[i])}' log.txt | sort
結果和資料庫統計是一樣的
2.統計頁面訪問次數
awk '{a[$1]+=1} END{for (i in a) printf("%10s %5d\n",i,a[i])}' log.txt | sort
3.統計最長訪問時間
awk '{if(a[$1]=="") a[$1]=$4; if(a[$1]>$4) a[$1]=$4} END{for (i in a) printf("%10s %5d\n",i,a[i])}' log.txt | sort
4.統計最短訪問時間
awk '{if(a[$1]=="") a[$1]=$4; if(a[$1]
5.統計平均訪問時間
awk '{s[$1]+=$4;c[$1]+=1} END{for (i in c) printf("%10s %5d\n",i,s[i]/c[i])}' log.txt | sort
6.統計一個時間段內的最大訪問時間
這個比較複雜,需要單獨寫一個指令碼檔案了
vim cal.awk
#!/bin/awk -f
{
dateStr = $2" "$3;
split(dateStr, dateStrArr, "[\\- :]");
dateStr = "";
for(i=1;i<=length(dateStrArr);i++)
dateStr = dateStr" "dateStrArr[i];
if(mktime(dateStr)>mktime("2015 02 28 09 00 00") && mktime(dateStr)
{
if(a[$1]=="") a[$1]=$4;
if(a[$1]
}
}
END {for (i in a) printf("%10s %5d\n",i,a[i])}
在資料庫中驗證
用awk處理時間比較麻煩,需要按照指定的格式拼湊mktime函式的引數.
參考:
http://www.cnblogs.com/chengmo/archive/2010/10/08/1845913.html
統計頁面的訪問時間,可以作為調優的一種依據.
實驗模擬Nginx的訪問日誌,統計頁面訪問的各項數值.
首先建立模擬資料
create table t
select
concat('/cms/',ceil(rand()*5),'.html') path,
now()-interval id+ceil(rand()*60) minute createtime,
ceil(rand()*100) ts
from nums where id<30;
其中nums是數字輔助表,參見
http://blog.itpub.net/29254281/viewspace-1362897/
將資料匯出為文字,模擬訪問日誌
select * from t into outfile '/tmp/log.txt';
資料如下,分別是訪問的頁面,訪問時間和訪問時長
1.統計訪問總時長(sum)
awk '{a[$1]+=$4} END{for (i in a) printf("%10s %5d\n",i,a[i])}' log.txt | sort
結果和資料庫統計是一樣的
2.統計頁面訪問次數
awk '{a[$1]+=1} END{for (i in a) printf("%10s %5d\n",i,a[i])}' log.txt | sort
3.統計最長訪問時間
awk '{if(a[$1]=="") a[$1]=$4; if(a[$1]>$4) a[$1]=$4} END{for (i in a) printf("%10s %5d\n",i,a[i])}' log.txt | sort
4.統計最短訪問時間
awk '{if(a[$1]=="") a[$1]=$4; if(a[$1]
5.統計平均訪問時間
awk '{s[$1]+=$4;c[$1]+=1} END{for (i in c) printf("%10s %5d\n",i,s[i]/c[i])}' log.txt | sort
這個比較複雜,需要單獨寫一個指令碼檔案了
vim cal.awk
#!/bin/awk -f
{
dateStr = $2" "$3;
split(dateStr, dateStrArr, "[\\- :]");
dateStr = "";
for(i=1;i<=length(dateStrArr);i++)
dateStr = dateStr" "dateStrArr[i];
if(mktime(dateStr)>mktime("2015 02 28 09 00 00") && mktime(dateStr)
{
if(a[$1]=="") a[$1]=$4;
if(a[$1]
}
}
END {for (i in a) printf("%10s %5d\n",i,a[i])}
在資料庫中驗證
用awk處理時間比較麻煩,需要按照指定的格式拼湊mktime函式的引數.
參考:
http://www.cnblogs.com/chengmo/archive/2010/10/08/1845913.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1443562/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- awk統計訪問nginx日誌次數Nginx
- awk分析日誌
- apache日誌統計 按小時,分鐘統計url訪問次數Apache
- Apche日誌系列(1):訪問日誌(轉)
- mysql audit-訪問日誌記錄應用MySql
- FeignClient配置日誌訪問client
- 【awk】按小時切割日誌
- awk多行日誌排序輸出排序
- Tomcat訪問日誌淺析Tomcat
- 使用Fluentd + Elasticsearch收集訪問日誌Elasticsearch
- nginx自動切割訪問日誌Nginx
- Nginx 訪問日誌格式設定Nginx
- 使用AWK規整KyLin日誌
- Nginx 訪問日誌實時解析 ngxtopNginx
- 使用外部表訪問監聽日誌
- Nginx入門教程(五)---訪問日誌簡單分析,統計PV、UV等資料。Nginx
- 使用外部表訪問警告日誌檔案
- go fiber: 增加訪問日誌accesslogGo
- 網站每日PV/IP統計/總頻寬/URL統計指令碼分享(依據網站訪問日誌)網站指令碼
- 在Linux中,如何統計ip訪問情況?分析 nginx 訪問日誌?如何找出訪問頁面數量在前十位的ip?LinuxNginx
- 日誌審計系統
- nginx日常應用之日誌分割(四)Nginx
- 訪問統計(排除爬蟲訪問)爬蟲
- Nginx訪問日誌、Nginx日誌切割、靜態檔案不記錄日誌和過期時間Nginx
- WEB訪問日誌自動化分析淺談Web
- 使用apache日誌進行訪問ip的排序Apache排序
- 使用AWK規整KyLin日誌改進
- 整理:AWK的初級運用之分組計算功能
- ELK日誌系統之通用應用程式日誌接入方案
- 使用 shell 命令統計日誌
- 歸檔日誌大小統計
- 使用goaccess統計nginx日誌GoNginx
- 藍橋杯-日誌統計
- Linux下使用GoAccess監控Nginx訪問日誌LinuxGoNginx
- 如何訪問Docker容器中的Spring Boot日誌DockerSpring Boot
- OSS訪問日誌分析(1):概念+巨集觀指標指標
- Apache訪問日誌access.log按天歸檔Apache
- 日誌服務之分析使用者訪問行為