我是靠谱客的博主 年轻八宝粥,最近开发中收集的这篇文章主要介绍(14.1)Nginx日志分析项目实战,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 1.ngingx的日志格式
    • 2.基于nginx日志的特点,分析nginx日志

1.ngingx的日志格式

  • nginx的日志格式:vim /etc/nginx/nginx.conf
log_format main '$remote_addr - $remote_user [stime_local] $request' 
				'"$status" $body_bytes_sent "$http_referer"' 
				'"$http_user_agent" "$http_x_forwarded_for"'

上面的变量都是nginx的内部变量
$remote_addr:远程IP;
$remote_user:远程用户;没有获得,则是-
$stime_local:时间;
$request:用来记录请求的url与http协议;post提交,delete删除,get请求,/是网站根目录
$status:用来记录请求状态;成功是200;
$body_bytes_sent:记录发送给客户端文件主体内容大小,请求的大小
$http_referer:用来记录从那个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;Mozilla是火狐访问的方式
$http_x_forwarded_for:访问用户的真实 IP 地址;
  • 参考:Nginx 日志格式

在这里插入图片描述

2.基于nginx日志的特点,分析nginx日志

  • ngingx的特点
$remote_addr $1
$time_local $4
$request $7
$status $9
$body_bytes_sent $10
  • (1)统计2017年9月5日的PV量
    PV量:Page View页面点击量
    注意awk是字符串比较,动作{print $0}是否需要无所谓,默认就自带
grep '05/Sep/2017' log|wc -l
awk '$4>="[05/Sep/2017:08:00:00" && $4<="[05/Sep/2017:09:00:00" {print $0}' log|wc -l
  • (2)统计2017年9月5日,一天内访问最多的10个IP(ip top10)
    数组:想统计啥,就把啥作为索引
    -k2按照第2列排序,逆序排列
    在这里插入图片描述
grep '05/Sep/2017' log|awk '{ips[$1]++} END{for(i in ips){print $i, ips[i]}}'|sort -k2 -rn |had -n 10

直接使用awk,但是awk需要转义
awk '/05/Sep/2017/{ips[$1]++} END{for(i in ips){print $i, ips[i]}}'|sort -k2rn |had -n 10
  • (3)统计2017年9月5日 访问大于100次的IP
grep '05/Sep/2017' log|awk '{ips[$i]++} END{for(i in ips){if(ips[i] > 100){print i, ips[i]}}}'

awk '/05/Sep/2017/{ips[$i]++} END{for(i in ips){{print i, ips[i]}}}' log|awk '$2>100'

在这里插入图片描述

  • (4)统计2017年9月5日,访问最多的10个页面{$request top 10}
grep '05/Sep/2017' log|awk '{urls[$7]++} END{for(i in urls){print urls[i], i}}'|sork -k1 -rn |head -n10

awk '/05/Sep/2017/{urls[$7]++} END{for(i in urls){print i, urls[i]}}'|sork -k2 -rn |head -n10

在这里插入图片描述

  • (5)统计2017年9月5日,每个URL访问内容的总大小
grep '05/Sep/2017' log|awk '{urls[$7]++; size[$7]+=$10} END{for(i in urls){print urls[i], size[i], i}}'|sork -k1 -rn |head -n10

awk '/05/Sep/2017/{size[$7]+=10} END{for(i in size){print i, size[i]}}'|sork -k2 -rn |head -n10

在这里插入图片描述

  • (6)统计2017年9月5日,每个IP访问状态码的数量($status)
    用啥,就把啥作为累加
    同一个IP,同一个状态码做索引,做++
先按照ip排序,相同ip在一起去
404是文件没有找到的意思
grep '05/Sep/2017' log|awk '{ip_code[$1" "$9]++} END{for(i in ip_code){print i, ip_code[i]}}'|sork -k1 -rn |head -n10

awk '/05/Sep/2017/{ip_code[$1" "$9]++} END{for(i in urls){print i, ip_code[i]}}'|sork -k1 -rn |head -n10

在这里插入图片描述

  • (7)统计2017年9月5日,每个IP访问状态码为404的数量及出现的次数($status)
grep '05/Sep/2017' log|awk '{if($9=="404"){ip_code[$1" "$9]++}} END{for(i in ip_code){print i, ip_code[i]}}' log|sort -k3rn|head

awk '/05/Se/2017/{if($9=="404"){ip_code[$1" "$9]++}} END{for(i in ip_code){print i, ip_code[i]}}' log|sort -k3rn|head

在这里插入图片描述

  • (8)统计前1分钟的PV量
date=$(date -d '-1 minute' +%d/%b/%Y:%H%M);awk -v date=$date '$0 ~ date {i++} END{print i}' log

awk -v a=$date '$0 ~ a' log

date -d ‘-1 minute’
前1分钟
awk -v a=$date
的-v表示外部变量的使用,将前面的$date变量的值赋给a

最后

以上就是年轻八宝粥为你收集整理的(14.1)Nginx日志分析项目实战的全部内容,希望文章能够帮你解决(14.1)Nginx日志分析项目实战所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部