使用Log日誌 計算帶寬流量峯值

awk 19html

通常來講流量帶寬是經過snmp協議取網卡流量畫圖。不過有的時候,爲了優化分析或者排錯,也會直接去計算服務的訪問流量。方法很簡單,根據日誌中記錄的 請求時間(squid記錄的是請求響應完成時間,若是要精確,能夠再減去響應時間,不過通常squid的文件不至於5分鐘內還傳不完的……),按每5分鐘 一彙總其字節數,而後均攤到300秒上。linux

計算全日誌中最高帶寬的命令行以下:nginx

cat $ACCESS_LOG|awk -F'[: ]' '{a[$5":"$6]+=$14}END{for(i in a){print i,a[i]}}'|sort|awk '{a+=$2;if(NR%5==0){if(a>b){b=a;c=$1};a=0}}END{print c,b*8/300/1024/1024}'

(日誌爲標準apache日誌格式) 而把最後的awk改爲’{a+=$2;if(NR%5==0){print $1,a*8/300/1024/1024;a=0}}’,就能夠輸出每5分鐘時的流量值,而後用GD庫畫圖~~(有時間看看perl的GD:Graph 模塊,應該不難)shell

案例:使用awk與sort -nr分析訪問日誌,找出每種請求返回狀態碼的請求個數:apache

訪問日誌的文件格式:bash

113.31.27.213 www.5iops.com – [15/Apr/2012:04:06:17 +0800] 「GET /faq/ HTTP/1.0″ 200 2795 「-」 「Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.2 Safari/535.11″ 118.119.120.248, 222.215.136.44 0.003 192.168.0.25:80 200 3.31優化

咱們最經常使用的處理方式爲:cat /home/logs/nginx/www.5iops.com.access.log|awk ‘{print $(NF-1)}’|sort -nr |uniq -c ,但其實,這個處理的效率較低:ui

time cat /home/logs/nginx/www.5iops.com.access.log|awk ‘{print $(NF-1)}’|sort -nr |uniq -c命令行

1 200″日誌

3 「404」

4 「304」

7377 「200」

48 「-」

real 0m0.107s

user 0m0.102s

sys 0m0.013s

time cat /home/logs/nginx/www.5iops.com.access.log|awk ‘{a[$(NF-1)]++} END{for (i in a) print i 」 」 a[i]}’

「304」 4

「404」 3

「200」 7399

「-」 49

200″ 1

real 0m0.018s

user 0m0.013s

sys 0m0.008s

可見使用後面的awk處理效率高10倍~

另外一個案例,用一行shell命令處理如下文本分析任務:

有一個文本文件,內容爲每行爲每隔5分鐘記錄的帶寬峯值,共一個月(共8640行),我須要計算出,天天的峯值並排序:

traffic文件格式:

-bash-4.1$ cat traffic.txt|more

2012-04-01 00:00 1952.34mbps

2012-04-01 00:05 2198.34 mbps

2012-04-01 00:10 2117.07 mbps

2012-04-01 00:15 2104.83 mbps

2012-04-01 00:20 1878.73 mbps

一種常看法決方法:

-bash-4.1$ for i in cat traffic.txt|awk '{print $1}'|sort|uniq ; do cat traffic.txt|grep $i|sort -nr -k3 |head -1 ; done

2012-04-01 21:35 3876.02 mbps

2012-04-02 21:15 3577.66 mbps

2012-04-03 21:35 3371.59 mbps

2012-04-04 21:10 3087.17 mbps

2012-04-05 21:35 3202.44 mbps

2012-04-06 20:45 3703.53 mbps

2012-04-07 20:40 4177.43 mbps

2012-04-08 14:25 3837.9 mbps

2012-04-09 20:50 3082.46 mbps

更高效的解決方法:

-bash-4.1$ cat traffic.txt |awk ‘{if($3 > a[$1])a[$1]=$3} END{for(i in a)print i 」 」 a[i]}’

2012-04-28 5369.81

2012-04-19 3474.73

2012-04-29 4824.24

2012-04-10 2979.91

2012-04-01 3876.02

2012-04-20 3866.19

2012-04-11 3548.73

2012-04-02 3577.66

2012-04-30 4077.35

經對比,後面一種方法處理執行效率仍然高10倍.可見活用awk對文本或日誌分析處理效率明顯提升.

相關文章
相關標籤/搜索