天天看点

Spring Actuator源码分析

actuator模块通过endpoint暴露一些接口,可以是rest方式,也可以是jmx等其他方式.

如果使用rest方式,通常springmvc是使用@requestmapping,以及@controller标注一个控制器方法,如果不使用springmvc,即没引入springmvc的包,那么springboot就会出错.所以为了不走正常的springmvc机制,actuator用endpointhandlermapping重写了requestmappinginfohandlermapping,匹配的是实现了mvcendpoint接口的”控制器”

Spring Actuator源码分析

<code>endpoint和mvcendpoint两个的区别?</code>

mvcendpoint是对endpoint springmvc层的装饰,添加了@requestmapping,以及@responsebody.具体逻辑委托给endpoint处理,.endpoint的id即为url.

现在访问 health endpoint 是这样的:

healthindicatorautoconfiguration会在endpointautoconfiguration之前,自动配置所有的healthindicator

actuator已经自带了一些healthindicator,自动启用部分:

Spring Actuator源码分析

多个healchindicator会由compositehealthindicator调用healthaggregator做aggregate(聚合),目前只有orderedhealthaggregator,用于排序

这个endpoint展示metrics信息,具体的metrics是由实现了publicmetrics接口的类处理.

metricsendpoint维护着一份publicmetrics列表,actuator已经实现了如下:

Spring Actuator源码分析

所有被激活的publicmetrics,都可以通过访问<code>/metrics</code>查看:

通过这个publicmetrics可以获取到控制器访问情况:

分别为hi接口响应时间,访问次数.

整个过程:

metricrepositoryautoconfiguration -&gt; counterbuffers,gaugebuffers用于保存计数数据

metricrepositoryautoconfiguration -&gt; 初始化gaugeservice + counterservice(内含counterbuffers,gaugebuffers)

metricfilterautoconfiguration -&gt; 初始化metricsfilter,该<code>过滤器</code>使用gaugeservice + counterservice统计访问次数以及响应时间

publicmetricsautoconfiguration -&gt; 初始化metricreaderpublicmetrics,塞入compositemetricreader(counterbuffers,gaugebuffers).

metricreaderpublicmetrics读取counterbuffers,gaugebuffers保存的统计数据

我们重点来看下<code>metricsfilter</code>这个过滤器:

当然也可以使用aop做一个method level的统计.但是我希望做一个与业务无关,集成到框架里的metrics统计

<a href="http://kielczewski.eu/2015/01/application-metrics-with-spring-boot-actuator/">http://kielczewski.eu/2015/01/application-metrics-with-spring-boot-actuator/</a>