笨法算RPS

計算rps的最簡單方法是將一天的總訪問量除以一天的總秒數(shù),但這只能得到一個平均值,無法反映各個時間點的真實情況。真正有價值的是即時rps數(shù)據(jù)。如果有一個好的監(jiān)控系統(tǒng),這并不難實現(xiàn),但遺憾的是我沒有這樣的系統(tǒng)。實際上,我遇到的問題更加復(fù)雜:大部分接口是用php編寫的,少部分是用lua編寫的,因此需要分別計算php和lua的即時rps數(shù)據(jù)。

假設(shè)Web日志已經(jīng)按天分割,如果你不知道如何操作,可以參考我之前寫的文章「被遺忘的Logrotate」。日志格式如下所示:

1.2.3.4 - - [25/Jul/2013:00:01:01 +0800] "GET /url HTTP/1.1" ...

從日志格式來看,第四個字段是時間,第七個字段是網(wǎng)址。有了這些信息,我們可以使用AWK來計算LUA和PHP的即時RPS大小。如果你讀過我之前的文章,應(yīng)該記得我在「devops的三板斧」一文中提到了一個類似的案例。不過,本文的問題更為復(fù)雜,因此我還是要詳細解釋一下。代碼如下:

#!/usr/bin/awk -f function rps(data, file) {     COMMAND = "sort -o " file     for(time in data) {         print time, "t", data[time] | COMMAND     }     close(COMMAND) } {     URL  = $7     TIME = substr($4, 14) } URL ~ /^/foo/lua/  { LUA[TIME]++; next } URL ~ /^/bar/lua/  { LUA[TIME]++; next }                      { PHP[TIME]++ } END {     rps(LUA, "LUA.log")     rps(PHP, "PHP.log") }

注意:在通過管道對AWK中的無序數(shù)組進行排序后,需要關(guān)閉管道。

計算得到的RPS文本數(shù)據(jù)格式大致如下:

00:00:00  115 00:00:01  85 00:00:02  95 00:00:03  85 00:00:04  90 00:00:05  87

接下來,我們使用Gnuplot將這些數(shù)據(jù)可視化:

#!/usr/bin/gnuplot set terminal png size 500,400 set grid set xdata time set timefmt "%H:%M:%S" set format x '%H' set xlabel "Time" set ylabel "RPS" set output "rps.png" plot "LUA.log" using 1:2 with line title "LUA",       "PHP.log" using 1:2 with line title "PHP"

最終生成的效果圖如下:

笨法算RPS

從圖中可以看出,LUA接口的訪問量高峰大致在晚上六點和凌晨零點,而PHP的訪問量高峰大致在晚上十點左右,兩者的訪問量低谷基本都在凌晨四五點左右。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊5 分享