应用监控与spring-boot-starter-actuato
Spring-boot-starter-actuator 自动配置模块用于支持SpringBoot应用的监控。
actuator翻译过来是:制动器,传动装置,执行机构等,那actuator到底是什么?
为了感知应用的运行状态, 我们通常会设置许多应用指标并采集分析,这类监控点一般只是读取状态数据,我们通常称它们为Sensor,既中文一般称为“传感器”。应用状态数据通过Sensors采集上来以后,我们通常会有专门系统对这些数据进行分析和判断,一旦某个指标数据超出了预定的阀值,这往往意味着应用的运行状态在这个指标上出现了“不健康”的现象,我们希望对这个指标进行调整,而为了能够执行调整,我们需要预先在应用内部设置对应的调整逻辑控制器(比如,直接关闭的开关,或者可以执行微调像刹车一样直接快速拉低某个指标的装置)这些控制器就称为Actuator。
所谓监控,Sensor更多服务于”监“,而:“Actuator”则服务于“控”的场景。
Spring-boot-starter-actuator 自动配置模块默认提供了很多endpoint ,这些endpoint可以按照“监”和“控”分为两类,
1.Sensor类endpoints
autoconfig:会为我们提供一份报告, 这份报告会告诉我们哪些自动配置生效了, 哪些没有。原因是什么?
beans:给出当前应用的容器中所有bean的信息
configprops:
info:提供当前SpringBoot应用的任意信息
health:针对当前Springboot应用的健康检查
env:关于当前SprintBoot应用对应的Environment.
metrics:sprintboot的metrics信息
trace:当前是springtboot的trace信息
mapping:如果是基于SpringMVC的web应用, mapping 这个endpoint将给出@RequestMapping相关信息.
2.Actuator类endpoints
shutdown:关闭当前SprintBoot应用的endpoint
dump:用于执行线程的dump操作.
默认情况下除了shutdown , 其他endpoint 都是默认启用状态.
endpoints.enabled= false
endponts.info.enable=true
endpoints.health..enable =true
.......
自定义应用的健康状态检查
要实现一个自定义的HealthIndicator , 一般我们不会直接实现HealthIndicator接口, 而是继承AbstractHealthIndicator
好处就是,我们只需要实现doHealthCheck, 在其中实现我们面向的具体服务的健康检查逻辑就可以了.
例如:我们实现一个DubboHealthIndicator ,而且还要把它注册到IoC容器中,这样才能使用.
为了一劳永逸, 他人能够同样方便的使用针对dubbo服务的检查支持,我们可以在DubboHealthIndicator基础上实现一个spring-boot-starter-dubbo-health-indicator自动配置模块.
然后,我们在spring-boot-starter-dubbo-health-indicator 的 META-INF/spring.factories文件中添加如下配置:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.keevo...DubboHealthIndicatorConfiguration
最后发布spring-boot-starter-dubbo-health-indicator并依赖它就可以自动享受针对当前应用引用的所有dubbo服务进行健康检查服务.
只有开放endpoints , 才有用.
1.所有endpoint实例以JMX MBean 的形式开放给外部监控者使用,默认情况下这些JMX MBean 会放在
org.springframework.boot命名空间下,可以通过endpoints.jmx.domain配置项进行更改,比如:
endpoints.jmx.domain=com.keevol.management
所以我们可以提供一批用于某些场景下的自定义Endpoint实现类, 让后将这些实现类注册到Ioc容器中,就可以扩展springboot 的endpoints 功能了.
问题来了,JMX 是什么东西
有问题首先百度,
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。
这是百度给出解释, 真是看得一脸懵逼 .. 看百度介绍也是脑壳疼..关于JMX框架是什么..这个小伙伴们自己有兴趣的深入研究下..
继续学习,我了解到如果这个springboot 应用是一个web应用, 那么这些endpoints还会通过HTTP协议开放给外部访问,与一般的web请求处理一样,使用的也是web应用使用的HTTP服务器和地址端口....什么 .这个好像比JMX简单啊我又学习到endpoint 是唯一的, 所以endpoints默认访问路径就是它们的id , 比如info这个endpoint的访问路径就是/info
Springboo允许我们通过management.为前缀的配置项对endpoints的HTTP开放行为进行调整:
使用management.context-path= 设置自定义的endpoints访问上下文路径,默认直接根路径,即/info ,/beans 等形式.
使用management.address = 配置单独的HTTP服务器监听地址,比如只允许本地访问 manangement.address = 127.0.0.1
使用manangement.port = 设置单独的监听端口,默认与web应用的对外服务端口相同,我们可以通过management.port = 8888将管理接口的HTTP对外监听端口设置为8888,但如果management.port=-1 ,则意味着我们将关闭接口的HTTP对外服务
总结: JMX和HTTP 都是endpoints 对外访问最常用的方式,
更多针对应用监控的支持和实现方案
1.CrshAutoConfiguration 与 spring-boot-starter-remote-shell
sprint-boot-starter-actuator 提供了基于CRaSH 的远程Shell 支持.简单的做法是让需要启动的CRaSH的SpringBoot 应用依赖spring-boot-starter-remote-shell自动配置模块,spring-boot-starter-remote-shell的主要功效就是提供了针对CRaSH的各项依赖
2.SpringBoot 的Metrics 与 Dropwizard 的Metrics
3.Auditing 与Trace