程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> nginx日志分析命令

nginx日志分析命令

編輯:PHP綜合

在分析服務器運行情況和業務數據時,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)print0}’過濾出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條請求 .

*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved