发表于: 2017-06-29 22:20:16
3 1370
今天完成的:任务7:查看Resin日志,统计访问DB时间,Controller处理时间
收获:
看师兄的日报找了一个shell脚本。
#!/bin/bash
echo "访问student接口的次数为:"
num= cat access.log |grep student |wc -l
echo "其中20ms内的有: $num20"
num20= cat access.log |grep student |awk '{print $1,$19}' |awk '{print substr($2,4)}' |awk '{if($1<0.020)print $1}' |wc -l
echo "其中10ms内的有:$num10"
num10= cat access.log |grep student |awk '{print $1,$19}' |awk '{print substr($2,4)}' |awk '{if($1<0.010)print $1}' |wc -l
百度了一下:
Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。
#!/bin/bash调用该目录下的bash执行该脚本,类似一个声明。
cat access.log 显示该文档。grep student 正则表达式匹配student。wc -l显示行数。返回的即是访问相关接口的次数。
awk '{print $1,$19}'意思是选取域1和于19之间的区域。awk中以一个空格作为分隔符,分割成两个域。
试过之后,发现这个脚本会报错。换了一个。
修改nginx日志格式,在http里添加如下:
log_format '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent $request_body "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'$upstream_addr $upstream_response_time $request_time ';
然后修改对应的server配置:
access_log /data/wwwlogs/access_api.log;
分析日志,查找响应时间大于0.02秒的请求的shell脚本:
cat access_api.log | awk '($NF>0.02){print $6 " " $7 " " $8 " " $11 " " $NF}' > c.txt
awk有内置的变量。对于每一个记录,即行,分隔空白字符分隔记录默认情况下,它存储在$ n个变量。如果该行有4个词,它会被存储在$1,$2,$3和 $4。$0表示整行。
NF是一个内置变量,它代表这一行有多少个被分隔的域。
遇到的问题:
1.中间出了一个小问题,即访问get/#{id}的时候该访问没有加入access日志。后来发现是由于地址栏自动补全,默认直接访问tomcat
的8080端口,而没有通过nginx的80端口,把端口改成80即可。
2.修改了一下nginx输出日志的位置access.log,重新载入配置文件之后竟然找不到了,改回原来的位置,还是找不到。很头疼。
今天效率确实低,总是在修改bug,linux下配置起来老是出问题。。明天无论如何一定要把任务3解决掉。
评论