Nginx日誌分析 awk 命令

經過Nginx日誌,能夠簡單分析WEB網站的運行狀態、數據報表、IP、UV(unique visitor指獨立訪客訪問數,一臺電腦終端爲一個訪客。)、PV(page view即頁面訪問量,每打開一次頁面PV計數+1,刷新頁面也是)訪問量等需求,以下爲經常使用需求分析:
(1) 統計Nginx服務器獨立IP數。 
awk '{print $1}' access.log |sort -r|uniq -c | wc -l
(2) 統計Nginx服務器總PV量。
awk '{print $7}' access.log |wc -l
(3) 統計Nginx服務器UV統計。
awk '{print $11}' access.log |sort -r|uniq -c |wc -l
(4) 分析Nginx訪問日誌截止目前爲止訪問量前20的IP列表。
awk '{print $1}' access.log|sort |uniq -c |sort -nr |head -20
(5) 分析Nginx訪問日誌早上9點至中午12點的總請求量。
sed -n "/2016:09:00/,/2016:12:00/"p access.log
awk '/2017:09:00/,/2017:12:00/' access.log|wc –l
(9) 分析Nginx訪問日誌狀態碼40四、50二、50三、500、499等錯誤信息頁面,打印錯誤出現次數大於20的IP地址。
awk '{if ($9~/502|499|500|503|404/) print $1,$9}' access.log|sort|uniq –c|sort –nr | awk '{if($1>20) print $2}'
(10) 分析Nginx訪問日誌訪問最多的頁面。
awk '{print \(7}' access.log |sort |uniq -c|sort -nr|head -20 (11) 分析Nginx訪問日誌請求處理時間大於5秒的URL,並打印出時間、URL、訪客IP。 awk '{if (\)NF>5) print $NF,$7,$1}' access.log|sort -nr|more
新增匹配案例c++

1.首先定義日誌格式:
'$remote_addr - \(remote_user [\)time_local] "$request" $status \(body_bytes_sent " \)http_referer" "\(http_user_agent" "\)http_x_forwarded_for"'
統計訪問 IP 次數:數組

awk '{a[$1]++}END{for(v in a)print v,a[v]}' access.log

統計訪問訪問大於 100 次的 IP:服務器

awk '{a[$1]++}END{for(v in a){if(a[v]>100)print v,a[v]}}' access.log

統計訪問 IP 次數並排序取前 10:網站

awk '{a[$1]++}END{for(v in a)print v,a[v] |"sort -k2 -nr |head -10"}' access.log

統計時間段訪問最多的 IP:spa

awk '$4>="[02/Jan/2017:00:02:00" && $4<="[02/Jan/2017:00:03:00"{a[$1]++}END{for(v in a)print v,a[v]}' access.log

統計上一分鐘訪問量:
date=$(date -d '-1 minute' +%d/%b/%Y:%H:%M)日誌

awk -vdate=$date '$4~date{c++}END{print c}' access.log

統計訪問最多的 10 個頁面:排序

awk '{a[$7]++}END{for(v in a)print v,a[v] |"sort -k1 -nr|head -n10"}' access.log

統計每一個 URL 數量和返回內容總大小:ssl

awk '{a[$7]++;size[$7]+=$10}END{for(v in a)print a[v],v,size[v]}' access.log

首先使用$7 ++ 賦值數組a,將收集到的下標進行統計,而後再相加,++字符是表明從0開始,而後每遇到一個相同的字段就+1,又定義了一個size 數組,匹配$7的地址,而後利用+=符號,計算每一個網頁的大小,遇到$7相同的網頁就$10就相加,因此匹配的條件的書籍都被寫入到awk 內部中的數組表內,最後利用for 循環賦值v 進行循環讀取awk數組表內的每一個值,進行輸出。

統計每一個 IP 訪問狀態碼數量:rem

awk '{a[$1" "$9]++}END{for(v in a)print v,a[v]}' access.log

統計訪問 IP 是 404 狀態的次數:
awk '{if ($9~/404/)a[$1" "$9]++}END{for(i in a)print i,a[i]}' access.logit

查詢18:00-18:09分日誌

grep '2019-10-30 18:0[0-9]' info.log

相關文章
相關標籤/搜索