美文网首页
应用监控与spring-boot-starter-actuato

应用监控与spring-boot-starter-actuato

作者: 编程人生 | 来源:发表于2021-12-07 23:33 被阅读0次

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 




    

相关文章

网友评论

      本文标题:应用监控与spring-boot-starter-actuato

      本文链接:https://www.haomeiwen.com/subject/kztzxrtx.html