常用linux命令總結(二)nginx日誌分析命令

在分析服務器運行情況和業務數據時,nginx日誌是非常可靠的數據來源,而掌握常用的nginx日誌分析命令的應用技巧則有着事半功倍的作用,可以快速進行定位和統計。下面是自己在分析nginx日誌時常用命令的一些總結。

1.利用grep ,wc命令統計某個請求或字符串出現的次數

比如我要統計GET /task/showContent接口在某天的調用次數,則可以使用如下命令:
cat nginx-ad-access.log | grep 'GET /task/showContent' | wc -l
其中cat用來讀取日誌內容,grep進行匹配的文本搜索,wc則進行最終的統計。
當然只用grep也能實現上述功能:

 grep 'GET /task/showContent'  nginx-ad-access.log -c

2.統計所有接口的調用次數並顯示出現次數最多的前二十的URL

cat nginx-ad-access.log|awk '{split($7,b,"?");COUNT[b[1]]++;}END{for(a in COUNT) print  COUNT[a], a}'|sort -k1 -nr|head -n20 

這裏awk是按照空格把每一行日誌拆分成若干項,其中$7對應的就是URL,當然具體對應的內容和使用nginx時設置的日誌格式有關。這樣就可以通過拆分提取出IP,URL,狀態碼等信息。split是awk的內置函數,在此的意思是按照“?”將URL進行分割得到一個數組,並賦值給b。COUNT[b[1]]++表示相同的接口數目加1。sort用來排序,-k1nr表示要把進行排序的第一列作爲數字看待,並且結果倒序排列。head -n20意爲取排名前二十的結果。
3. 統計報錯的接口
統計nginx日誌中報錯較多的接口,對於分析服務器的運行情況很有幫助,也可以有針對性的修復bug和性能優化。

cat nginx-ad-access.log|awk'{if($9==500) print $0}'|awk '{split($7,b,"?");COUNT[b[1]]++;}END{for(a in COUNT) print  COUNT[a], a}'|sort -k 1 -nr|head -n10

先用awk’{if(9==500)print 0}’過濾出500錯誤的日誌,然後在此基礎上做統計,其思路同2
4. 統計HTTP響應狀態碼
通過統計響應狀態碼可以看出服務器的響應情況,比如499較多時可以判斷出服務器響應緩慢,再結合3可以找出響應慢的接口,這樣就能有針對性進行性能分析和優化

 cat nginx-ad-access.log |awk '{counts[$(9)]+=1}; END {for(code in counts) print code, counts[code]}' | sort -k 2 -nr

5.統計服務器併發量

cat nginx-ad-access.log |grep '10.15.19.138'| awk '{COUNT[$4]++}END{for( a in COUNT) print a,COUNT[a]}'|sort -k 2 -nr|head -n20

nginx轉發請求時可以記錄響應請求的服務器IP,先通過grep過濾出某個服務器所有的請求,然後統計各個時間點的併發請求響應的數量即可得到某個服務器的併發量。$4對應的是響應時間。當然,如果把grep的內容更換成某個接口也就可以統計出該接口對應的併發量了。

6.grep多條件與或操作
有時候我們需要在nginx日誌通過多個條件來查找某些特定請求,比如我需要找個某個用戶瀏覽文章的請求,則可以需要同時匹配兩個條件:瀏覽文章接口GET /task/showContent和userId=59h7hrrn,grep對應的與操作命令如下:

grep -E "GET /task/showContent.*userId=59h7hrrn" nginx-ad-access.log

grep與命令格式: grep -E “a.*b” file,ab條件同時成立
而grep或命令的格式爲:grep -E “a|b” file ,ab兩個條件有一個成立即可。

7.grep打印匹配的前後幾行
有時候我們需要查找某個特定請求的前後幾行的請求,以觀察用戶的關聯操作情況。grep提供了一下幾條命令:
grep -C 5 ‘parttern’ inputfile //打印匹配行的前後5行

grep -A 5 ‘parttern’ inputfile //打印匹配行的後5行

grep -B 5 ‘parttern’ inputfile //打印匹配行的前5行

比如grep -C 10 ‘GET /task/showContent/1agak?userId=59h7hrrn’ nginx-ad-access.log就可以打印出該請求的前後10條請求 .



更多內容歡迎關注個人微信公衆號,一起成長!

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章