0x01:根據(jù)訪問IP統(tǒng)計(jì)UV
- UV(Unique Visitor)獨(dú)立訪客,統(tǒng)計(jì)訪問某站點(diǎn)的用戶數(shù);
- IP(Internet Protocol)獨(dú)立IP數(shù),是指獨(dú)立的瀏覽了頁面的不同IP,即統(tǒng)計(jì)不同的IP瀏覽用戶數(shù)量。同一IP不管訪問了幾個(gè)頁面,獨(dú)立IP數(shù)均為1;不同的IP瀏覽頁面,計(jì)數(shù)會(huì)加1。IP是基于用戶廣域網(wǎng)IP地址來區(qū)分不同的訪問者的,所以多個(gè)用戶(多個(gè)局域網(wǎng)IP)在同一個(gè)路由器(同一個(gè)廣域網(wǎng)IP)內(nèi)上網(wǎng),可能被記錄為一個(gè)獨(dú)立IP訪問者。另外如果用戶不斷更換IP,則有可能被多次統(tǒng)計(jì)。
awk '{print $1}' access.log | sort | uniq -c | wc -l
0x02: 根據(jù)訪問URL統(tǒng)計(jì)PV
- PV(Page View)訪問量, 即頁面瀏覽量或點(diǎn)擊量,衡量網(wǎng)站用戶訪問的網(wǎng)頁數(shù)量;在一定統(tǒng)計(jì)周期內(nèi)用戶每打開或刷新一個(gè)頁面就記錄1次,多次打開或刷新同一頁面則瀏覽量累計(jì)。
awk '{print $7}' access.log | wc -l
0x03: 統(tǒng)計(jì)訪問最多的URL
根據(jù)訪問最多的URL來判斷哪些業(yè)務(wù)比較繁忙;也跟根據(jù)情況判斷是否該業(yè)務(wù)是否有黑客攻擊。
awk '{print $7}' access.log | sort | uniq -c | sort -n -k 1 -r | more

加一個(gè)more命令主要防止URL一屏幕顯示不下的情況。
0x04:統(tǒng)計(jì)訪問最頻繁的IP
根據(jù)訪問IP來判斷哪些IP操作最多;也可以根據(jù)情況判斷該IP是不是疑似攻擊IP。
awk '{print $1}' access.log | sort | uniq -c | sort -n -k 1 -r | more

加一個(gè)more命令主要防止IP一屏幕顯示不下的情況。
0x05:根據(jù)時(shí)間段統(tǒng)計(jì)查看日志
具體使用sed或者grep都可以,主要是編寫正則表達(dá)式
sed:
cat access.log | sed -n '/29/Aug/2020:[01-23]/p' | more
grep:
grep '29/Aug/2020:[01-23]' access.log | more
0x06:統(tǒng)計(jì)當(dāng)日的的pv和uv
因?yàn)槭墙y(tǒng)計(jì)當(dāng)日的pv和uv,所以在編寫命令時(shí)之前了解一下Nginx的日志格式。日志的默認(rèn)格式如下:

默認(rèn)輸出的月份使用英文簡(jiǎn)寫。
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
如果使用以上這兩個(gè)命令發(fā)現(xiàn)統(tǒng)計(jì)不出來任何數(shù)據(jù)時(shí),就要檢查一下,系統(tǒng)的語言變量LANG是否配置成中文,如果是需要配置成英文

使用以下命令配置成英文
export LANG="en_US.UTF-8"
這時(shí)在執(zhí)行pv和uv命令應(yīng)該就可以統(tǒng)計(jì)出來了,如下圖

0x07:獲取最耗時(shí)的請(qǐng)求時(shí)間、url、耗時(shí)
下面是獲取最耗時(shí)的前十個(gè)請(qǐng)求,如果想獲取全部去掉:head -10
cat access.log | awk '{print $4,$7,$NF}'
| awk -F '"' '{print $1,$2,$3}' | sort -k3 -rn | head -10
0x08:獲取每分鐘的請(qǐng)求數(shù)量
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: 查看某個(gè)時(shí)間段之間的ip訪問個(gè)數(shù)
例如查看10點(diǎn)到19點(diǎn)的訪問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點(diǎn)到19點(diǎn)之間的ip訪問數(shù),并且訪問數(shù)>=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