转自: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源码分析(转)相关推荐

  1. Spring Cloud源码分析(二)Ribbon(续)

    因文章长度限制,故分为两篇.上一篇:<Spring Cloud源码分析(二)Ribbon> 负载均衡策略 通过上一篇对Ribbon的源码解读,我们已经对Ribbon实现的负载均衡器以及其中 ...

  2. Spring AOP 源码分析 - 拦截器链的执行过程

    1.简介 本篇文章是 AOP 源码分析系列文章的最后一篇文章,在前面的两篇文章中,我分别介绍了 Spring AOP 是如何为目标 bean 筛选合适的通知器,以及如何创建代理对象的过程.现在我们的得 ...

  3. Spring AOP 源码分析 - 创建代理对象

    1.简介 在上一篇文章中,我分析了 Spring 是如何为目标 bean 筛选合适的通知器的.现在通知器选好了,接下来就要通过代理的方式将通知器(Advisor)所持有的通知(Advice)织入到 b ...

  4. Spring AOP 源码分析 - 筛选合适的通知器

    1.简介 从本篇文章开始,我将会对 Spring AOP 部分的源码进行分析.本文是 Spring AOP 源码分析系列文章的第二篇,本文主要分析 Spring AOP 是如何为目标 bean 筛选出 ...

  5. spring AOP源码分析(一)

    spring AOP源码分析(一) 对于springAOP的源码分析,我打算分三部分来讲解:1.配置文件的解析,解析为BeanDefination和其他信息然后注册到BeanFactory中:2.为目 ...

  6. 一步一步手绘Spring AOP运行时序图(Spring AOP 源码分析)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  7. 精尽Spring Boot源码分析 - 内嵌Tomcat容器的实现

    概述 我们知道 Spring Boot 能够创建独立的 Spring 应用,内部嵌入 Tomcat 容器(Jetty.Undertow),让我们的 jar 无需放入 Servlet 容器就能直接运行. ...

  8. 【Spring】Spring AOP源码分析-导读(一)

    文章目录 1.简介 2.AOP 原理 3.AOP 术语及相应的实现 3.1 连接点 - Joinpoint 3.2 切点 - Pointcut 3.3 通知 - Advice 3.4 切面 - Asp ...

  9. 视频教程-Spring底层源码分析-Java

    Spring底层源码分析 鲁班学院-子路老师曾就职于谷歌.天猫电商等多家互联网公司,历任java架构师.研发经理等职位,参与并主导千万级并发电商网站与后端供应链研发体系搭建,多次参与电商大促活动技术保 ...

最新文章

  1. 未来2年,程序员如何吊打高学历工程师?服气!
  2. 基于OpenCV的图像强度操作
  3. OpenCV2:应用篇 QT+OpenCV实现图片编辑器
  4. python map reduce filter_Python map, reduce, filter和sorted
  5. c语言用hash方式数组去重,js数组去重的hash方法
  6. 解决172.17 或者172.18 机房环境下harbor服务器不通的问题
  7. 枚举与Lambda表达式
  8. Swoole(PHP高级Web开发框架)
  9. 3PAR副总裁谈09年存储虚拟化
  10. 微信支付商户平台:商户简称
  11. html怎么画表格边框,WEB 制作1px边框表格的几种方法
  12. 为什么对偶问题一定是凸优化问题?
  13. 在mac上使用PDF Expert中常见问题解答
  14. SlicePlane的Heading角度与Math.atan2(y,x)的对应转换关系
  15. Windows系统 修改 dns
  16. CSS开发中所有基本属性的使用技巧
  17. 宏观经济笔记--社会消费品零售总额
  18. Matlab中grid函数的用法
  19. 至联云课堂:隐私泄露屡禁不止,根本原因其实是...
  20. kube-apiserver准入

热门文章

  1. Java集合7 (NavigableSet)
  2. Application Session Cookie ViewState Cache Hidden 区别
  3. Event delegate
  4. 订单×××的算法研究与实现
  5. 【按住你的心】——Android开发CheckBoxRadioButton控件的简单使用
  6. sed替换每行最后一个字符
  7. 对于一些手机内存概念的思考、深入理解java的finalize,对于内存优化的小总结...
  8. 聊聊kafka client chunkQueue 与 MaxLag值
  9. ef延迟加载不到导航属性问题
  10. Visual Studio 15改进C++工程加载