利用 awk 統計nginx 中某一個用戶的訪問次數


  線上總是會遇到攻擊,所以就需要分析 access.log 看看那些用戶的訪問次數不正常,針對這些不正常的用戶,要做處理,以 access.log為例說明下怎么統計.

通過 access.log 日志來統計某個用戶的訪問次數的方法:(業務場景是登錄,然后 access.log 里只有登錄的 url,然后我們有一個特定的參數需要客戶端傳遞過來,通過對此參數的過濾來分析行為,因為涉及到用戶的數據都是加密的,沒辦法直接通過用戶名直接過濾,access.log 的日志內容我做里處理,為了不泄露線上的數據.下面的 uniqueCode 和我們日志里的某一個字段對應,但是我們日志里是加密的,這里為了簡單化,沒做加密,統計的方法最重要。)
1)、access.log 日志內容如下:
1.2.3.4 - - [04/May/2018:09:26:09 +0800] "POST /XXX/login.htm HTTP/1.1" 200 896 "0.009" "okhttp/3.9.1" "userName=zhuzi&password=z13y14Bao&uniqueCode=88888888"

2.3.4.5 - - [04/May/2018:09:26:09 +0800] "POST /XXX/login.htm HTTP/1.1" 200 887 "0.010" "okhttp/3.9.1" "userName=zi&password=z13y14Bao&uniqueCode=99999999"

3.2.3.4 - - [04/May/2018:09:26:09 +0800] "POST /XXX/login.htm HTTP/1.1" 200 896 "0.009" "okhttp/3.9.1" "userName=haiyang&password=21131409oui&uniqueCode=11111111"

4.3.4.5 - - [04/May/2018:09:26:09 +0800] "POST /XXX/login.htm HTTP/1.1" 200 887 "0.010" "okhttp/3.9.1" "userName=anya&password=213sdfasdf&uniqueCode=44444444"

4.3.4.5 - - [04/May/2018:09:26:09 +0800] "POST /XXX/login.htm HTTP/1.1" 200 887 "0.010" "okhttp/3.9.1" "userName=anya&password=213sdfasdf&uniqueCode=44444444"

2)、取出 uniqueCode 

因為uniqueCode 在最后,有一個 ",所以我們可以添加一個 & 1=1 ,

sed -i 's/"$/\&1=1"/g' access.log

grep 'uniqueCode' 1_access.log | awk -F '&' '{for(x=1;x<NF;x++)if(index($x, "uniqueCode")>0){print substr($x,12); break}}' >out.log

3)、統計每個 applicationId 的個數
cat out.log | awk '{arr[$1]+=1}END{for(i in arr)print i,arr[i]}' | sort -t ' ' -n -k2

好尷尬,費了好大勁,才寫了上面的方法來統計,結果最近發現了一個更簡單的方法來統計。哎,還是 linux 不熟呀.

sort out.log|uniq -c

 

 

好了,搞定收工.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM