Spring Boot Actuator(基于SpringBoot2)

Spring Boot Actuator(超详细教程)

  • 背景
  • 1、Spring Boot Actuator
    • 1.简介
    • 2.版本过渡(1.x——>2.x)
    • 3.使用
      • 1.引入Actuator的场景
      • 2.查看监控状态
        • 方式一:使用JMX(java管理扩展)
        • 方式二:通过http请求访问(强烈推荐)
      • 3.配置文件端点配置
  • 2、Actuator Endpoints
    • 1.常用的Endpoints:
    • 2.几个重要的Endpoint:
      • 1.Health Endpoint
      • 2.Metrics Endpoints
    • 3.管理Endpoint
      • 1.Endpoint的暴露
      • 2.Endpoint的开启&禁用
    • 3.自定义Endpoint
      • 1.自定义health
      • 2.自定义info
      • 3.自定义Endpoint
  • 3、Spring Boot Admin(可视化工具)

背景

由于微服务的出现,系统业务发展随之微型化,每个节点都是系统的组成部分,因此全方位的监控固然重要。所以我们需要一个具有非常强大的监控功能的框架支持,而Spring Boot Actuator 便能帮助我们全方位的监控应用结点!!

1、Spring Boot Actuator

1.简介

Spring Boot Actuator 是 SpringBoot 自带的一个组件,是对SpringBoot进行监控、追踪、审计、控制等,是用来帮助我们每个微服务推向生产环境时对其进行监控和管理的工具集。

我们可以使用JMX或HTTP端点来管理和监视应用程序,也可以使用可视化工具(Spring Boot Admin)来进行页面展示。

2.版本过渡(1.x——>2.x)

Spring Boot Actuator(基于SpringBoot2)_第1张图片

3.使用

1.引入Actuator的场景

 
 <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-actuatorartifactId>
dependency>

2.查看监控状态

方式一:使用JMX(java管理扩展)

cmd中输入jconsole,进入java监视和管理控制台,并根据你当前springboot项目,选中当前项目启动类的全类名:
Spring Boot Actuator(基于SpringBoot2)_第2张图片
Spring Boot Actuator(基于SpringBoot2)_第3张图片
Spring Boot Actuator(基于SpringBoot2)_第4张图片

方式二:通过http请求访问(强烈推荐)

访问 http://localhost:8080/actuator/** :
Spring Boot Actuator(基于SpringBoot2)_第5张图片
注:默认情况下,通过HTTP请求不能访问所有端点,只有暴露了health信息,而使用JMX可以查看所有端点信息

从SpringBoot2.6.1开始,默认不会暴露info端点
Spring Boot Actuator(基于SpringBoot2)_第6张图片

3.配置文件端点配置

示例:

management:
  #配置所有的端点
  endpoints:
    enabled-by-default: false #true为暴露所有端点,false为禁用所有端点
    #jmx方式配置
    jmx:
      exposure:
        include:
        exclude: 
    #web方式配置
    web:
      base-path: /maoge #修改访问路径
      exposure:
        include: '*'
        exclude:
        
  #配置单个端点
  endpoint:
    info:
      enabled: true #开启info端点


2、Actuator Endpoints

1.常用的Endpoints:

Endpoint 描述
beans 显示应用程序中所有Spring Bean的完整列表。
caches 暴露可用的缓存。
conditions 显示自动配置的所有条件信息,包括匹配或不匹配的原因。
configprops 显示所有@ConfigurationProperties。
flyway 显示已应用的所有Flyway数据库迁移。 需要一个或多个Flyway组件。
health 显示应用程序健康状况信息。
info 显示应用的基本信息
env 暴露Spring的属性ConfigurableEnvironment,显示当前的环境特性
httptrace 显示HTTP跟踪信息(默认情况下,最近100个HTTP请求-响应)。需要一个HttpTraceRepository
组件。
loggers 显示和修改应用程序中日志的配置。
liquibase 显示已应用的所有Liquibase数据库迁移。需要一个或多个Liquibase组件。
metrics 显示当前应用程序的“指标”信息。
scheduledtasks 显示应用程序中的计划任务。
sessions 允许从Spring Session支持的会话存储中检索和删除用户会话。需要使用Spring Session的基于Servlet的Web应用程序。
shutdown 使应用程序正常关闭。默认禁用。
threaddump 执行线程转储

2.几个重要的Endpoint:

1.Health Endpoint

健康检查端点,我们一般用于在云平台;平台会定时的检查应用的健康状况,Health Endpoint 就可以为平台返回当前应用的一系列组件健康状况的集合(健康检查后的汇总报告),很多健康检查默认已经配置好了,比如:数据库、redis等;也可以很容易添加自定义的健康检查机制。

访问 http://localhost:8080/actuator/health 时,得到的是信息{“status”:“UP”},如果出现异常,status的值还有可能是DOWM:
Spring Boot Actuator(基于SpringBoot2)_第7张图片
如果想要查看health的详细信息(配置文件配置):

management:
    health:
      enabled: true
      show-details: always #开启总是显示详细信息,可显示每个模块的状态信息

2.Metrics Endpoints

Metrics端点是用来返回当前应用各类重要度量指标,比如内存信息、线程信息、垃圾回收信息等。也可以添加自定义Metrics或者扩展已有的Metrics。

访问 http://localhost:8080/actuator/metrics ,可以查看当前工程metrics端点所支持的度量指标:
Spring Boot Actuator(基于SpringBoot2)_第8张图片
由图可以知道metrics端点所支持的度量指标后,就可以通过 http://localhost:8080/actuator/metrics/{name} 请求获取每个度量指标的信息。比如 访问 http://localhost:8080/actuator/metrics/application.ready.time 来获取 application.ready.time对应的信息:
Spring Boot Actuator(基于SpringBoot2)_第9张图片

3.管理Endpoint

1.Endpoint的暴露

  • JMX方式:默认是暴露所有Endpoint
  • HTTP方式:默认是暴露health 和 info Endpoint(特别注意:从SpringBoot2.6.1开始,默认不再暴露info Endpoint
  • 如果引入了SpringSercurity,则会默认配置安全访问规则

2.Endpoint的开启&禁用

  • 默认除了shutdown,其他Endpoint都是开启的

  • 开启&禁用所有的Endpoint

    management:
      endpoints:
        #false为禁用所有端点,true为开启所有端点
        enabled-by-default: false
    
  • 开启单个Endpoint

    management:
      endpoint:
        metrics:
          enabled: true #开启metrics端点
        health:
          enabled: true #开启health端点
        info:
          enabled: true #开启infoduandian
    

3.自定义Endpoint

1.自定义health

  1. 继承AbstractHealthIndicator

    //示例:
    @Component
    public class MaogeHealthIndicator extends AbstractHealthIndicator {
        @Override
        protected void doHealthCheck(Health.Builder builder) throws Exception {
            builder.withDetail("msg","状态糟糕").down().build();
        }
    }
    
    
  2. 实现HealthIndicator接口

    //示例:
    @Component
    public class MyHealthIndicator implements HealthIndicator {
        @Override
        public Health health() {
            Health health = Health.down().withDetail("msg", "状态不错")
                                         .withDetail("hunnu", "湖南师范大学").build();
            return health;
        }
    }
    

运行结果:
Spring Boot Actuator(基于SpringBoot2)_第10张图片

2.自定义info

  1. 编写配置文件:

    info:
      appName: 毛哥test
      version: 555
    

    运行结果:
    Spring Boot Actuator(基于SpringBoot2)_第11张图片

  2. 实现InfoContributor接口

//示例:
@Component
public class SimpleInfoContributor implements InfoContributor {
    @Override
    public void contribute(Info.Builder builder) {
        builder.withDetail("内存","空间充足")
                .withDetail("磁盘", "空间充足").build();

    }
}

运行结果:
Spring Boot Actuator(基于SpringBoot2)_第12张图片

3.自定义Endpoint

  1. 实现指定的接口(已废弃,博主就不去详细展示了)

  2. 基于注解的形式实现

    • 常见的注解有:
      @Endpoint:既支持JMX又支持HTTP
      @WebEndpoint:只支持HTTP
      @JmxEndpoint:只支持JMX

    • 其中 @ReadOperation 这个注解相当于restful api的GET操作,@WriteOperation 相当于restful api的Post操作,@DeleteOperation 相当于restful api的DELETE操作。使用 @Selector注解进行传参

    • 在类上标注**@Endpoint**,然后对应类的方法上标注@ReadOperation、@WriteOperation或@DeleteOperation,并且方法通过JMX自动开启,并且在Web应用程序中也可以通过HTTP方式进行访问。

    示例:

    //自定义一个端点maoge
    @Endpoint(id = "maoge")
    @Component
    public class SimpleEndpoint {
    
        @ReadOperation
        public String read(){
            return "hello 同学";
        }
    
        @WriteOperation
        public void write(){
            System.out.println("同学们,加油!");
        }
    }
    

    运行结果:
    Spring Boot Actuator(基于SpringBoot2)_第13张图片

3、Spring Boot Admin(可视化工具)

查看下篇博客SpringBootAdmin(基于SpringBoot2)

你可能感兴趣的:(Spring,Boot,Actuator,SpringBoot2,java,spring,boot,安全)