1. 程式人生 > 實用技巧 >Awk分析nginx訪問日誌

Awk分析nginx訪問日誌

awk是Linux系統下一個處理文字的程式語言工具,能用簡短的程式處理標準輸入或檔案、資料排序、計算以及生成報表等等,應用非常廣泛。

預設日誌格式:

'$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:

# 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/%d/%Y:%H:%M)
# awk -vdate=$date '$4~date{c++}END{printc}' access.log


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

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


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

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


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

# 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 v,a[v]}' ac