根據日誌估算系統QPS

2021-09-17 05:18:23 字數 1482 閱讀 7101

背景:線上有乙個推薦服務,日誌量比較大,想確認下是不是qps過高

問題:如何根據日誌檢視乙個服務的qps

tail -f ***.log,可以發現日誌格式如下:

[8708-10 14:51:44 638 info ] [async task worker[61]] recommend.components.keywordservice[87] - cateid=252 pagenum=1 

[8708-10 14:51:44 666 info ] [async task worker[62]] recommend.components.keywordservice[87] - cateid=42205 

[8708-10 14:51:44 673 info ] [async task worker[0]] recommend.components.keywordservice[87] - cateid=29 pagenum=2 

[8708-10 14:51:44 677 info ] [async task worker[1]] recommend.components.keywordservice[87] - cateid=252 pagenum=3 

日誌規範中,有一列「請求時間」,可以通過這個「請求時間」估算出服務的qps, 步驟如下:

(1)先找一條使得乙個請求有且只有一行的日誌,常用工具是grep,此例需要grep recommend.components.keywordservice,得出的結果,乙個請求對應一行日誌

(2)取出時間這一列,常用的工具是cut或者awk,這裡介紹一下cut(大家到linux上去man一下)

-d 引數,按照某個字元分隔

-f 引數,取出分隔後的第幾列

這個例子中,按照「空格」分隔後,時間在第二列

進行1,2兩步操作後,得到的結果為

14:51:44

14:51:44

14:51:45

14:51:45

14:51:46

14:51:46

(3)對結果進行去重,取計數,常用的工具是uniq,引數是-c

故,整個shell命令是:

命令:tail -f ***.log | grep recommend.components.keywordservice | cut -d' ' -f2 | cut -d':' -f3 | uniq -c

說明:取增量 | 乙個請求取一行 | 把時間擷取出來 | 把秒數擷取出來 | 去重取計數

得到的結果是

136 43

126 44

115 45

131 46

132 47

可以看到,14:51:43,共有136條日誌

44,有126條日誌

45,有115條日誌

...結論,這個模組,單機的qps在120-130左右

需要注意的是,cut的目的是將請求日誌時間戳中的「秒」取出來,所以隨著請求日誌格式的不同,cut的寫法也要隨機應變~

原文: 

根據訪問日誌計算伺服器的QPS

假設訪問日誌格式如下,我們想統計cancel這個服務的qps 2017 04 25 15 31 11 service ser1 cancel 175.57 2.66 7794 00 2017 04 25 16 31 11 service ser1 delete 175.57 2.67 7794 00...

通過nginx日誌統計伺服器請求QPS

檢視伺服器qps 這裡使用的nginx,cd到nginx的access.log目錄,檢視日誌檔案。統計當前時間每秒的請求數。日誌格式 bash命令 tail 500 access.log awk uniq c 全部 cat access.log awk uniq c命令 單次靜態輸出 tail 50...

如何運營億級QPS的Redis系統

我們在運營redis的過程中,遇到各種各樣的問題總結如下 環境 網路 tcp引數設定的問題 設計 做持久化時,頁表複製造成的卡頓 開發者 慢查詢,連線風暴,缺流控等 終端使用者 比如電商的秒殺活動,訪問陡增導致處理能力到極限。總的來說,是服務執行過程中,資源的需求與供給不匹配。在應對這些運營難題過程...