NGINX 日志分析
remote_addr 远程主机IP地址 $1
remote_user 远程用户 (如果没有获得则为 - )
[$time_local] 访问时间 $4
$request 访问请求方式 $6 $7(URL) $8(版本号)
$status 状态码 $9
$boby_bytes_sent 请求网页文件大小 $10
$http_referer 请求的是哪个页面 $11
$http_user_agent 客户端访问的方式是什么,用什么主机进行访问的 $12
$http_x_forwarded_for HTTP请求端真实的IP
统计网页当前TCP连接数
ss -an | grep ‘^tcp’ | awk ‘{tcp_connect_status[$2]++} END{for(i in tcp_connect_status) {print i,tcp_connect_status[i]}}’
一、统计PV量
1.统计某一天(2020年4月21日)的PV量
grep ‘21/Apr/2020’ /usr/local/nginx/logs/www.shm.log | wc -l
2.统计某一天某一时段(2020年4月21日9点~11点)之间的PV量
awk ‘$4>="[21/Apr/2020:09:00:00]" && $4<="[21/Apr/2020:10:00:00]" {print $0}’ /usr/local/nginx/logs/www.shm.log | wc -l
3.统计一周前的PV量
1.获取一周前的日期
date -d '-1 week' +%d/%b/%Y
14/Apr/2020
2.将一周前的日期设置成一个外部变量
date="14/Apr/2020"
3.在AWK中使用外部变量,进行匹配
awk -v a=$date '$0 ~ a{i++} END {print i}' /usr/local/nginx/logs/www.shm.log
二、统计IP地址
1.统计某一天(2020年4月21日)当中,访问最多的10个IP地址
awk ‘/21/Apr/2020/ { ips[$1]++ } END { for(i in ips){print i,ips[$1]} }’ /usr/local/nginx/logs/www.shm.log | sort -k2 -rn | head -n10
2.统计某一天(2020年4月21日)当中,访问量大于100次的IP地址
awk ‘/21/Apr/2020/ { ips[$1]++ } END { for (i in ips) { if (ips[i]>100) {print i,ips[i]} } }’ /usr/local/nginx/logs/www.shm.log
三、统计URL访问的页面
1.统计某一天(2020年4月21日)当中,访问最多的10个页面($request)
awk ‘/21/Apr/2020/ { urls[$7]++ } END { for(i in urls) { print i,urls[i] } }’ /usr/local/nginx/logs/www.shm.log | sort -k1 -rn | head -n5
2.统计某一天当中,所有URL访问内容的总大小,以及访问次数
awk ‘/21/Apr/2020/ { urls[$7]++ ; size[$7]+=$10 } END { for (i in urls) { print i,size[i],urls[i] } }’ /usr/local/nginx/logs/www.shm.log | sort -k2 -rn | head
四、统计IP状态码
1.统计某一天(2020年4月21日)每个IP访问状态码数量($status)
awk ‘/21/Apr/2020/ { ipcode[$1" "$9]++ } END { for(i in ipcode) { print i,ipcode[i]} }’ /usr/local/nginx/logs/www.shm.log | sort -k1 -rn
2.统计某一天(2020年4月21日),某个IP地址 + 访问状态码404出现次数
awk ‘/21/Apr/2020/ { if($9 == “404”) {ipcode [$1" "$9]++ } } END { for(i in ipcode) print i,ipcode[i] }’ /usr/local/nginx/logs/www.shm.log | sort -k1 -rn
3.统计某一天(2020年4月21日),各种状态码的数量以及百分比占比
r/local/nginx/logs/www.shm.log | sort -k1 -rn
3.统计某一天(2020年4月21日),各种状态码的数量以及百分比占比
awk ‘/21/Apr/2020/ { code[$9]++;total++ } END {for (i in code) {printf i" “;printf code[i]” "; printf “%.2f%\n”,code[i]/total*100}}’ /usr/local/nginx/logs/www.shm.log