第十六章:Spring Boot 与监控管理

一、监控管理

  通过引入spring-boot-starter-actuator,可以使用Spring Boot为我们提供的准生产环境下的应用监控和管理功能。我们可以通过HTTP, JMX, SSH协议来进行操作,自动得到审计、健康及指标信息等。

  步骤:

  1、引入 spring-boot-starter-actuator

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

 

  2、通过 http 方式访问监控端点

  创建项目,并引入 actuator,并启动项目

  项目 pom.xml 配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.njf</groupId>
    <artifactId>spring-boot-16-actuator</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot-16-actuator</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 

    启动项目:

第十六章:Spring Boot 与监控管理

 

   使用了 actuator 之后,会自动添加很多的映射,这些就是用于监控管理的请求信息。

 

二、监控和管理端点

  监控和管理端点:

  第十六章:Spring Boot 与监控管理

 

   默认这些访问都是受保护的,不可以直接访问,可以在 application.properties 中设置下面的属性,就可以访问了。

  第十六章:Spring Boot 与监控管理

management.security.enabled=false

  

  (1)health:监控应用健康状况

    第十六章:Spring Boot 与监控管理

 

  (2)auditevents:审计事件

    第十六章:Spring Boot 与监控管理

 

  (3)beans:所有 Bean的信息

    第十六章:Spring Boot 与监控管理

 

  (4)info:当前应用信息

    第十六章:Spring Boot 与监控管理

     可以在 application.properties 中配置 info 信息

info.app.id=Hello
info.app.verion=1.0.0

      还可以配置 git 的信息(可以参照GitProperties 类)

    创建 git.properties 并配置信息;

git.branch=master
git.commit.id=njf
git.commit.time=2022-01-08 12:12:56

 

  (5)dump:应用中的线程状态信息

    第十六章:Spring Boot 与监控管理

 

  (6)autoconfig:所有自动配置信息

    第十六章:Spring Boot 与监控管理

 

    第十六章:Spring Boot 与监控管理

 

  (7)heapdump:下载当前内存快照

    

  (8)trace:追踪信息(最新的http 请求)

    第十六章:Spring Boot 与监控管理

 

  (9)mappings:应用 @RequestMapping 映射路径,由哪个Controller来处理

    第十六章:Spring Boot 与监控管理

 

  (10)metrics:应用的各项指标

    第十六章:Spring Boot 与监控管理

 

  (11)env:当前环境信息

    第十六章:Spring Boot 与监控管理

 

  (12)loggers:日志相关信息

    第十六章:Spring Boot 与监控管理

 

  (13)configprops:所有配置属性

    第十六章:Spring Boot 与监控管理

 

  (14)shutdown:远程关闭当前应用(默认关闭)

    在application.properties 中开启此功能:(可进行 shutdown,POST 提交,此端点默认关闭)

#远程关闭应用,需要发送post请求
endpoints.shutdown.enabled=true

 

    可以使用 Postman 发送 POST  请求来测试:

http://localhost:8080/shutdown

  

 

三、定制端点信息

  定制端点一般通过endpoints+端点名+属性名来设置

修改端点id(endpoints.beans.id=mybeans)
开启远程应用关闭功能(endpoints.shutdown.enabled=true)
关闭端点(endpoints.beans.enabled=false)

   示例:

#定制端点信息,id 和 path 只能一个生效
endpoints.beans.id=mybean
endpoints.beans.path=/bean
#禁用端点信息
endpoints.beans.enabled=false

 

  定制端点访问根路径:

#定制端点访问根路径
management.context-path=/manage

    此时的端点访问路径就是 http://localhost:8080/manage/beans。

  这样可以结合 Spring Security 进行权限控制。

 

  定制端点的访问端口:

#定制端点的访问端口,如果为 -1 表示关闭端点访问
management.port=8181

  

  关闭所有端点,按需启动端点:

#关闭所有端点,按需启动端点
endpoints.enabled=false
endpoints.beans.enabled=true

  

 

四、 自定义 HealthIndicator

  1、health 端点

    第十六章:Spring Boot 与监控管理

    默认只有当前应用中组件的健康状态,Spring Boot 也提供了一些默认提供好的组件健康状态。

    第十六章:Spring Boot 与监控管理

 

  2、以 Redis 为例

  (1)加入 Redis 的场景启动器

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

 

  (2)配置 Redis 的信息

#配置 redis 的主机地址(配置是错误的)
spring.redis.host=localhost

  

  (3)启动服务

  第十六章:Spring Boot 与监控管理

 

     可以看到 Redis 连接是异常的。

     SpringBoot 提供了 RedisHealthIndicator 类用来检查 Redis 的连接状态。

 

  3、自定义健康状态指示器

  (1)自定义健康状态指示器步骤:

1、编写一个指示器,必须实现 HealthIndicator 接口
2、指示器的名字  xxxHealthIndicator
3、加入容器中

  

  (2)自定义健康状态指示器:

@Component
public class MyAppHealthIndicator implements HealthIndicator {


    @Override
    public Health health() {
        //自定义的检查方法

        //Health.up().build(); 代表应用健康
        Health build = Health.down().withDetail("msg", "服务异常").build();

        return build;
    }
}

 

   测试:

  第十六章:Spring Boot 与监控管理

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

上一篇:php-Laravel 4:当foreign_key为null时,防止延迟加载hasMany关系(可选关系)


下一篇:java-如何从SurfaceView类或嵌套线程内部结束活动