awk分析日誌常用高級使用命令方法 分析訪問日誌(Nginx為例) 日誌格式: ...
awk分析日誌常用高級使用命令方法
分析訪問日誌(Nginx為例)
日誌格式:
'$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(i in a)print v,a[i]}' access.log
統計訪問訪問大於100次的IP:
# awk '{a[$1]++}END{for(i in a){if(a[i]>100)print i,a[i]}}' access.log
統計訪問IP次數併排序取前10:
# awk '{a[$1]++}END{for(i in a)print i,a[i]|"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(i in a)print i,a[i]}'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(i in a)print i,a[i]|"sort -k1 -nr|head -n10"}' access.log
統計每個URL數量和返回內容總大小:
# awk '{a[$7]++;size[$7]+=$10}END{for(i in a)print a[i],i,size[i]}' access.log
統計每個IP訪問狀態碼數量:
# awk '{a[$1" "$9]++}END{for(i in a)print i,a[i]}' access.log
統計訪問IP是404狀態次數:
# awk '{if($9~/404/)a[$1" "$9]++}END{for(i in a)print i,a[i]}' access.log
附: sort -k 的用法,-k 則是按照第幾列進行排序輸出,可按照數字進行選擇