发表于: 2017-10-24 21:59:08
1 778
今天完成的事情
编写脚本,用来统计nginx的响应时间
需要再nginx.conf配置文件中设置日志的输出格式,不然默认的输出格式中没有响应时间,其配置如下:
其中upstream_response_time 就是响应时间
编写脚本如下:
其基本思路是转到日志文件所在的目录,利用tail命令抽取最近的100条日志,抽取其中的响应时间,并对其进行统计,得到响应时间的分布。利用awk命令可以对日志进行逐行处理,它会将一行按照空格分为各个段,所设置的响应时间在第26段,用$26表示。
执行结果:
在resin的日志中没有找到关于连接DB时间,和controller处理时间的信息,查看大佬们的日报,说是用AOP和log4j来打印相关信息到日志文件中,再对其进行操作。
参考师兄们的日报,编写了切面类:
@Component
@Aspect
public class Cut {
Logger log=Logger.getLogger(Cut.class);
@Around("execution(* com.jnshu.service.*.*(..))")
public Object stime(ProceedingJoinPoint pj)throws Throwable{
Long begin=new Date().getTime();
Object o=pj.proceed();
Long end=new Date().getTime();
log.info("访问DB花费时间 "+(end-begin)+" 毫秒");
return o;
}
@Around("execution(* com.jnshu.controller.*.*(..))")
public Object ctimeget(ProceedingJoinPoint pj)throws Throwable{
Long begin=new Date().getTime();
Object o=pj.proceed();
Long end=new Date().getTime();
log.info("访问controller话费时间 "+(end-begin)+" 毫秒");
return o;
}
}
需要再spring MVC中进行配置:
<context:component-scan base-package="com.jnshu.service"/>
<context:component-scan base-package="com.jnshu.controller"/>
<context:component-scan base-package="com.jnshu.util"/>
<aop:aspectj-autoproxy/>
还要再log4j的配置文件中配置输出格式路径,格式:
## 日志文件(logFile)
log4j.appender.R=org.apache.log4j.FileAppender
log4j.appender.R.Append=true
log4j.appender.R.File=/usr/local/resin/resin-4.0.52/log/DBtime.log
#log4j.appender.R.Threshold=INFO
log4j.appender.R.layout=org.apache.log4j.PatternLayout
#log4j.appender.R.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
log4j.appender.R.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
然后编写统计脚本。
因为输出到日志文件的信息是杂揉在一起的,是一条DB的,一条controller的:
所以需要对其进行筛选,再进行统计。参考了陈昊大佬的代码,在awk命令中对一行进行匹配,只对有规定的字段的那一行进行操作,具体代码如下:
对最近的200条日志进行统计,实际上是分别对100条DB连接时间,和100条controller处理时间进行统计。执行结果如下:
成功实现统计效果。
明天的计划
完成任务三
遇到的问题
在服务器上部署项目在tomcat中,总是启动失败,然后将同样的项目放在resin中启动就能成功,还不清楚原因。
shell命令很不习惯
收获
学习了查看日志并对相关信息进行处理。
评论