本文以Spring Web的后台开发讲解。
上一篇讲解了如何使用jvisualvm监控Java程序。jvisualvm虽然已经挺强大了,但是在实际的应用中依然不满足我们的需求。现在,我们想要监控应用程序中所有Controller提供的接口的访问数量,频次,响应时长。Service层方法的执行次数,执行时长,频次等等。以便之后对系统的性能优化做准备。这个时候jvisualvm已经不能满足我们的需求了。
1 方法级监控Java程序的方案
这是我对于方法级监控Java程序的方案:
付费的,比如YourKit,JProfile等。我尝试了YourKit,功能确实强大,但是现在性能并不是我们现在的瓶颈,我们尽量使用不付费的。
Metrics-Spring。Metrics-Spring需要在每个方法上使用注解。我们采用微服务架构,20多个服务,每个工程预计平均有100左右个方法要监控。如果是一开始就用这个我觉得还可以。
Metrics+Spring AOP。从Metrics-Spring中可以看到,Metrics统计的信息基本满足我们的需求。我们的项目需求是统计Controller层和Service层的方法。那么可以通过Spring中的切面完成我们的需求。
我调查的方案和分析基本这样,其他人如果有更好的方案可以提出一起探讨。
下面是讲解+部分代码,本次讲解还有优化篇。
2 Metrics的功能
关于Metrics的使用方法,已经有很多文章介绍了,我在这里推荐我认为还不错的给大家,然后我再介绍的使用方法.
Metrics介绍。这篇文章对Metrics的基本功能介绍的已经很全面了。
Metrics-Spring官方文档。这篇文章介绍了Metrics与Spring的集成,但是文档感觉不全呀。
其他的文章我就不多分享了,感觉大同小异。没什么太大差别。
3 将Metrics相关类装载到Spring容器
要使用Metric,那么首先需要MetricRegistry。
我们需要提供Http的报表,所以我们需要将MetricsServlet注册到Spring中,以便可以通过Http接口获取监控结果。下面代码我们将监控接口定义为:/monitor/metrics。
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.servlets.MetricsServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.contex