以nginx默認的日誌格式爲例:php
$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"
各字段的含義分別是:nginx
$remote_addr
請求者IP$remote_user
HTTP受權用戶,若是不使用Http-based認證方式,其值爲空[$time_local]
服務器時間戳"$request"
HTTP請求類型(如GET,POST等)+HTTP請求路徑(不含參數)+HTTP協議版本$status
服務器返回的狀態碼(如200,404,5xx等)$body_bytes_sent
服務器響應報文大小,單位byte"$http_referer"
referer字段值"$http_user_agent"
User Agent字段如下列舉經常使用的日誌分析命令服務器
cat access.log | cut -d '"' -f3 | cut -d ' ' -f2 | sort | uniq -c | sort -r
輸出樣例:wordpress
210433 200 38587 302 17571 304 4544 502 2616 499 1144 500 706 404 355 504 355 301 252 000 9 403 6 206 2 408 2 400
或者使用awk:url
awk '{print $9}' access.log | sort | uniq -c | sort -r
上例顯示有704次404請求,接下來是如何找到這些請求的URL日誌
awk '($9 ~ /404/)' access.log | awk '{print $7}' | sort | uniq -c | sort -r
輸出樣列:code
21 /members/katrinakp/activity/2338/ 19 /blogger-to-wordpress/robots.txt 14 /rtpanel/robots.txt
接下來考慮若是找到這些請求的IP地址,使用命令:blog
awk -F\" '($2 ~ "/wp-admin/install.php"){print $1}' access.log | awk '{print $1}' | sort | uniq -c | sort -r
輸出樣例:排序
14 50.133.11.248 12 97.106.26.244 11 108.247.254.37 10 173.22.165.123
php後綴的404請求(一般是嗅探)rem
awk '($9 ~ /404/)' access.log | awk -F\" '($2 ~ "^GET .*\.php")' | awk '{print $7}' | sort | uniq -c | sort -r | head -n 20
awk -F\" '{print $2}' access.log | awk '{print $2}' | sort | uniq -c | sort -r
url包含XYZ:
awk -F\" '($2 ~ "ref"){print $2}' access.log | awk '{print $2}' | sort | uniq -c | sort -r