0x01:根據訪問IP統計UV
- UV(Unique Visitor)獨立訪客,統計訪問某站點的用戶數;
- IP(Internet Protocol)獨立IP數,是指獨立的瀏覽了頁面的不同IP,即統計不同的IP瀏覽用戶數量。同一IP不管訪問了幾個頁面,獨立IP數均為1;不同的IP瀏覽頁面,計數會加1。IP是基于用戶廣域網IP地址來區分不同的訪問者的,所以多個用戶(多個局域網IP)在同一個路由器(同一個廣域網IP)內上網,可能被記錄為一個獨立IP訪問者。另外如果用戶不斷更換IP,則有可能被多次統計。
awk '{print $1}' access.log | sort | uniq -c | wc -l
0x02: 根據訪問URL統計PV
- PV(Page View)訪問量, 即頁面瀏覽量或點擊量,衡量網站用戶訪問的網頁數量;在一定統計周期內用戶每打開或刷新一個頁面就記錄1次,多次打開或刷新同一頁面則瀏覽量累計。
awk '{print $7}' access.log | wc -l
0x03: 統計訪問最多的URL
根據訪問最多的URL來判斷哪些業務比較繁忙;也跟根據情況判斷是否該業務是否有黑客攻擊。
awk '{print $7}' access.log | sort | uniq -c | sort -n -k 1 -r | more
加一個more命令主要防止URL一屏幕顯示不下的情況。
0x04:統計訪問最頻繁的IP
根據訪問IP來判斷哪些IP操作最多;也可以根據情況判斷該IP是不是疑似攻擊IP。
awk '{print $1}' access.log | sort | uniq -c | sort -n -k 1 -r | more
加一個more命令主要防止IP一屏幕顯示不下的情況。
0x05:根據時間段統計查看日志
具體使用sed或者grep都可以,主要是編寫正則表達式
sed:
cat access.log | sed -n '/29/Aug/2020:[01-23]/p' | more
grep:
grep '29/Aug/2020:[01-23]' access.log | more
0x06:統計當日的的pv和uv
因為是統計當日的pv和uv,所以在編寫命令時之前了解一下Nginx的日志格式。日志的默認格式如下:
默認輸出的月份使用英文簡寫。
pv:
cat access.log | sed -n /`date "+%d/%b/%Y"`/p | awk '{print $7}' | sort | wc -l
uv:
cat access.log | sed -n /`date "+%d/%b/%Y"`/p |awk '{print $1}' | sort|uniq -c | wc -l
如果使用以上這兩個命令發現統計不出來任何數據時,就要檢查一下,系統的語言變量LANG是否配置成中文,如果是需要配置成英文
使用以下命令配置成英文
export LANG="en_US.UTF-8"
這時在執行pv和uv命令應該就可以統計出來了,如下圖
0x07:獲取最耗時的請求時間、url、耗時
下面是獲取最耗時的前十個請求,如果想獲取全部去掉:head -10
cat access.log | awk '{print $4,$7,$NF}'
| awk -F '"' '{print $1,$2,$3}' | sort -k3 -rn | head -10
0x08:獲取每分鐘的請求數量
cat access.log | awk '{print substr($4,14,5)}' | uniq -c | awk '{print $2","$1}'
可以輸出到csv格式文件中
cat access.log | awk '{print substr($4,14,5)}'
| uniq -c | awk '{print $2","$1}' > access.csv
0x09: 查看某個時間段之間的ip訪問個數
例如查看10點到19點的訪問ip
grep "2020:1[0-9]" access.log | awk '{ips[$1]+=1} END{for(ip in ips) print ips[ip],ip}' | sort -nr | wc -l
如下圖
查看10點到19點之間的ip訪問數,并且訪問數>=200的ip
grep '2020:1[0-19]' access.log |
awk '{ips[$1]+=1}END{for(ip in ips) if(ips[ip]>=200) print ips[ip],ip}' | sort -nr