Nginx基础篇(11)日志分析
  UYqGUrvNnnTe 2023年11月02日 16 0

常用字段

$remote_addr      $1  远程客户端地址
$time_local $4 本机时间
$request $7 请求URL
$status $9 状态码
$body_bytes_sent $10 请求体积

统计PV量

grep "04/Jun/2022" /var/log/nginx/access.log |wc -l


15点-16点间
grep "04/Jun/2022:15" /var/log/nginx/access.log |wc -l

awk '$4>="[04/Jun/2022:15:00:00" && $4<="[04/Jun/2022:16:00:00" {print $0}' /var/log/nginx/access.log |wc -l


统计一天内访问最多的10个IP

grep '04/Jun/2022' /var/log/nginx/access.log |awk '{ips[$1]++} END{for(i in ips){print i,ips[i]} }' |sort -k2 -rn |head -n 10


统计访问大于10次的IP

grep '/Jun/2022' /var/log/nginx/access.log |awk '{ips[$1]++} END{for(i in ips){if (ips[i]>10) {print i ,ips[i]}}}' |sort -k2 -rn |head -n10


统计访问最多的10个页面

grep '04/Jun/2022' /var/log/nginx/access.log |awk '{urls[$7]++} END{for(i in urls){print urls[i],i }}'|sort -k2 -rn|head -n10


统计每个URL访问内容总大小

grep '04/Jun/2022' /var/log/nginx/access.log |awk '{urls[$7]++;size[$7]+=$10} END{for(i in urls){print urls[i],size[i],i}}' |sort -k2 -rn


统计每个IP访问状态码数量

grep '04/Jun/2022' /var/log/nginx/access.log |awk '{ip_code[$1" "$9]++} END{for(i in ip_code){print i,ip_code[i]}}'


统计每个IP访问状态码为404及出现次数

grep '04/Jun/2022' /var/log/nginx/access.log |awk '$9=="404" {aaa[$1" "$9]++} END{for(i in aaa){print i,aaa[i]}}'
grep '04/Jun/2022' /var/log/nginx/access.log |awk '{if($9=="404"){ip_code[$1" "$9]++}} END{for(i in ip_code){print i,ip_code[i]}}'


统计前一分钟的PV量

date=$(date -d '-1 minute' +%Y:%H:%M); awk -v date=$date '$0 ~ date{i++} END{print i}' /var/log/nginx/access.log 

shell中的变量在awk程序中无法使用,因为在执行AWK时,是一个新的进程去处理的,因此就需要-v 来向awk程序中传参数了,你比如在shell程序中有一个变量a=15,你在awk程序中直接使用变量a是不行的,而你用awk -v b=a, 这样在AWK程序中就可以使用变量b了!也就相当于使用a了! 


统计15:00-16:00,每个IP,出现404状态码的数量

awk '$4>="[/04/Jun/2022:15:00:00" && $4>="[/04/Jun/2022:16:00:00" {if($9=="404"){ip_code[$1" "$9]++}} END{for(i in ip_code){print i,ip_code[i]}}' /var/log/nginx/access.log 


统计各种状态码数量

grep '04/Jun/2022' /var/log/nginx/access.log |awk '{code[$9]++} END{for(i in code){print  i,code[i]}}'

百分比

grep '04/Jun/2022' /var/log/nginx/access.log |awk '{code[$9]++;total++} END{for(i in code){printf i" ";printf code[i]"\t";printf "%.2f",code[i]/total*100;print "%"}}'


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
UYqGUrvNnnTe
最新推荐 更多