Spring Actuator源码分析(转)
转自:http://blog.csdn.net/wsscy2004/article/details/50166333
Actuator Endpoint
Actuator模块通过Endpoint暴露一些接口,可以是Rest方式,也可以是JMX等其他方式.
如果使用Rest方式,通常SpringMVC是使用@RequestMapping,以及@Controller标注一个控制器方法,如果不使用SpringMVC,即没引入SpringMVC的包,那么Springboot就会出错.所以为了不走正常的SpringMVC机制,Actuator用EndpointHandlerMapping重写了RequestMappingInfoHandlerMapping,匹配的是实现了MvcEndpoint接口的”控制器”
Endpoint和MvcEndpoint两个的区别?
MvcEndpoint是对Endpoint SpringMVC层的装饰,添加了@RequestMapping,以及@ResponseBody.具体逻辑委托给Endpoint处理,.Endpoint的id即为url.
文档中已经提到了自定义endpoint的方法,
Health Check
HealthEndpoint是Actuator自带的Health Check,具体的检查操作都是交由HealthIndicator处理,根据文档,实现 HealthIndicator即可自定义一些Health Check的逻辑,如下
@Component public class MyHealth implements HealthIndicator {@Overridepublic Health health() {return new Health.Builder().withDetail("tair", "timeout") // some logic check tair.withDetail("tfs", "ok") // some logic check tfs.status("500").down().build();} }
现在访问 health endpoint 是这样的:
$ curl http://localhost:8080/health {"status": "DOWN","tair": "timeout","tfs": "ok" }
HealthIndicatorAutoConfiguration会在EndpointAutoConfiguration之前,自动配置所有的HealthIndicator
Actuator已经自带了一些HealthIndicator,自动启用部分:
多个HealchIndicator会由CompositeHealthIndicator调用HealthAggregator做aggregate(聚合),目前只有OrderedHealthAggregator,用于排序
Metrics Endpoint
这个Endpoint展示Metrics信息,具体的Metrics是由实现了PublicMetrics接口的类处理.
MetricsEndpoint维护着一份PublicMetrics列表,Actuator已经实现了如下:
所有被激活的PublicMetrics,都可以通过访问/metrics
查看:
{"counter.status.200.root": 20,"counter.status.200.metrics": 3,"counter.status.200.star-star": 5,"counter.status.401.root": 4,"gauge.response.star-star": 6,"gauge.response.root": 2,"gauge.response.metrics": 3,"classes": 5808,"classes.loaded": 5808,"classes.unloaded": 0,"heap": 3728384,"heap.committed": 986624,"heap.init": 262144,"heap.used": 52765,"mem": 986624,"mem.free": 933858,"processors": 8,"threads": 15,"threads.daemon": 11,"threads.peak": 15,"uptime": 494836,"instance.uptime": 489782,"datasource.primary.active": 5,"datasource.primary.usage": 0.25
}
MetricReaderPublicMetrics
通过这个PublicMetrics可以获取到控制器访问情况:
"gauge.response.hi": 5, "counter.status.200.hi": 19,
分别为hi接口响应时间,访问次数.
整个过程:
MetricRepositoryAutoConfiguration -> CounterBuffers,GaugeBuffers用于保存计数数据
MetricRepositoryAutoConfiguration -> 初始化GaugeService + CounterService(内含CounterBuffers,GaugeBuffers)
MetricFilterAutoConfiguration -> 初始化MetricsFilter,该过滤器
使用GaugeService + CounterService统计访问次数以及响应时间
PublicMetricsAutoConfiguration -> 初始化MetricReaderPublicMetrics,塞入CompositeMetricReader(CounterBuffers,GaugeBuffers).
MetricReaderPublicMetrics读取CounterBuffers,GaugeBuffers保存的统计数据
我们重点来看下MetricsFilter
这个过滤器:
自定义Metrics
根据文档,可以在业务代码中注入CounterService或GaugeService来统计信息:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.metrics.CounterService; import org.springframework.stereotype.Service;@Service public class MyService {private final CounterService counterService;@Autowiredpublic MyService(CounterService counterService) {this.counterService = counterService;}@PostConstructpublic void exampleMethod() {this.counterService.increment("services.system.myservice.invoked");}}
@PostConstruct必须添加
当然也可以使用AOP做一个method level的统计.但是我希望做一个与业务无关,集成到框架里的Metrics统计
Reference
http://kielczewski.eu/2015/01/application-metrics-with-spring-boot-actuator/
转载于:https://www.cnblogs.com/shuiyelifang/p/8359995.html
Spring Actuator源码分析(转)相关推荐
- Spring Cloud源码分析(二)Ribbon(续)
因文章长度限制,故分为两篇.上一篇:<Spring Cloud源码分析(二)Ribbon> 负载均衡策略 通过上一篇对Ribbon的源码解读,我们已经对Ribbon实现的负载均衡器以及其中 ...
- Spring AOP 源码分析 - 拦截器链的执行过程
1.简介 本篇文章是 AOP 源码分析系列文章的最后一篇文章,在前面的两篇文章中,我分别介绍了 Spring AOP 是如何为目标 bean 筛选合适的通知器,以及如何创建代理对象的过程.现在我们的得 ...
- Spring AOP 源码分析 - 创建代理对象
1.简介 在上一篇文章中,我分析了 Spring 是如何为目标 bean 筛选合适的通知器的.现在通知器选好了,接下来就要通过代理的方式将通知器(Advisor)所持有的通知(Advice)织入到 b ...
- Spring AOP 源码分析 - 筛选合适的通知器
1.简介 从本篇文章开始,我将会对 Spring AOP 部分的源码进行分析.本文是 Spring AOP 源码分析系列文章的第二篇,本文主要分析 Spring AOP 是如何为目标 bean 筛选出 ...
- spring AOP源码分析(一)
spring AOP源码分析(一) 对于springAOP的源码分析,我打算分三部分来讲解:1.配置文件的解析,解析为BeanDefination和其他信息然后注册到BeanFactory中:2.为目 ...
- 一步一步手绘Spring AOP运行时序图(Spring AOP 源码分析)
相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...
- 精尽Spring Boot源码分析 - 内嵌Tomcat容器的实现
概述 我们知道 Spring Boot 能够创建独立的 Spring 应用,内部嵌入 Tomcat 容器(Jetty.Undertow),让我们的 jar 无需放入 Servlet 容器就能直接运行. ...
- 【Spring】Spring AOP源码分析-导读(一)
文章目录 1.简介 2.AOP 原理 3.AOP 术语及相应的实现 3.1 连接点 - Joinpoint 3.2 切点 - Pointcut 3.3 通知 - Advice 3.4 切面 - Asp ...
- 视频教程-Spring底层源码分析-Java
Spring底层源码分析 鲁班学院-子路老师曾就职于谷歌.天猫电商等多家互联网公司,历任java架构师.研发经理等职位,参与并主导千万级并发电商网站与后端供应链研发体系搭建,多次参与电商大促活动技术保 ...
最新文章
- 未来2年,程序员如何吊打高学历工程师?服气!
- 基于OpenCV的图像强度操作
- OpenCV2:应用篇 QT+OpenCV实现图片编辑器
- python map reduce filter_Python map, reduce, filter和sorted
- c语言用hash方式数组去重,js数组去重的hash方法
- 解决172.17 或者172.18 机房环境下harbor服务器不通的问题
- 枚举与Lambda表达式
- Swoole(PHP高级Web开发框架)
- 3PAR副总裁谈09年存储虚拟化
- 微信支付商户平台:商户简称
- html怎么画表格边框,WEB 制作1px边框表格的几种方法
- 为什么对偶问题一定是凸优化问题?
- 在mac上使用PDF Expert中常见问题解答
- SlicePlane的Heading角度与Math.atan2(y,x)的对应转换关系
- Windows系统 修改 dns
- CSS开发中所有基本属性的使用技巧
- 宏观经济笔记--社会消费品零售总额
- Matlab中grid函数的用法
- 至联云课堂:隐私泄露屡禁不止,根本原因其实是...
- kube-apiserver准入
热门文章
- Java集合7 (NavigableSet)
- Application Session Cookie ViewState Cache Hidden 区别
- Event delegate
- 订单×××的算法研究与实现
- 【按住你的心】——Android开发CheckBoxRadioButton控件的简单使用
- sed替换每行最后一个字符
- 对于一些手机内存概念的思考、深入理解java的finalize,对于内存优化的小总结...
- 聊聊kafka client chunkQueue 与 MaxLag值
- ef延迟加载不到导航属性问题
- Visual Studio 15改进C++工程加载