使用Log日誌 計算頻寬流量峰值

來源:互聯網
上載者:User

標籤:

awk 19

一般來說流量頻寬是通過snmp協議取網卡流量畫圖。不過有的時候,為了最佳化分析或者排錯,也會直接去計算服務的訪問流量。方法很簡單,根據日誌中記錄的 請求時間(squid記錄的是請求響應完成時間,如果要精確,可以再減去回應時間,不過一般squid的檔案不至於5分鐘內還傳不完的……),按每5分鐘 一匯總其位元組數,然後均攤到300秒上。

計算全日誌中最高頻寬的命令列如下:

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 模組,應該不難)

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

訪問日誌的檔案格式:

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 ,但其實,這個處理的效率較低:

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對文本或日誌分析處理效率明顯提高.

  • 本文來自:Linux教程網

使用Log日誌 計算頻寬流量峰值

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.