概述
文章目录
- 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日志分析项目实战所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复