Spring Boot Admin 参考指南

Posted 阿提说说

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot Admin 参考指南相关的知识,希望对你有一定的参考价值。

大家好,欢迎来到👏阿提说说👏博客
该篇文章,由浅入深的介绍了Spring Boot Admin 的特性以及自定义二次开发,想要快速使用,请点击【快速开始】,想要深入了解的继续往下阅读。

Spring Boot Admin参考指南

Spring Boot Admin 2.5.1
Johannes Edmeier @joshiste Version 2.5.1,23.08.2021

1.什么是Spring Boot Admin

codecentric 的Spring Boot Admin 是一个社区项目,能够监控和管理您的Spring Boot 应用。这些应用通过Http注册到Spring Boot Admin 或者通过Spring Cloud的注册中心(如Eureka、Consul)来发现。UI是Spring Boot Actuator端点上的Vue.js应用。

使用Pyctuator可以支持监控Python应用程序。

2.快速开始

2.1 设置Spring Boot Admin Server

首先,需要设置一下服务端,只需要通过start.spring.io创建一个简单的Spring Boot项目。由于Spring Boot Admin Server能够做为servlet或webflux应用运行,因此您需要决定添加对应的Spring Boot Starter。在这个例子中,我们使用servlet web starter。

1.添加Spring Boot Admin启动器到依赖
pom.xml

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
    <version>2.5.1</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

🚩
如果要使用snapshot版本的Spring boot Admin Server,您可能需要把spring 和 sonatype的快照仓库加到pom中
pom.xml

<repositories>
   <repository>
       <id>spring-milestone</id>
       <snapshots>
           <enabled>false</enabled>
       </snapshots>
       <url>http://repo.spring.io/milestone</url>
   </repository>
   <repository>
       <id>spring-snapshot</id>
       <snapshots>
           <enabled>true</enabled>
       </snapshots>
       <url>http://repo.spring.io/snapshot</url>
   </repository>
   <repository>
      <id>sonatype-nexus-snapshots</id>
       <name>Sonatype Nexus Snapshots</name>
       <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
      <snapshots>
         <enabled>true</enabled>
      </snapshots>
      <releases>
          <enabled>false</enabled>
      </releases>
   </repository>
</repositories>

2.通过添加@EnableAdminServer配置引入Spring Boot Admin Server配置

@Configuration
@EnableAutoConfiguration
@EnableAdminServer
public class SpringBootAdminApplication 
    public static void main(String[] args) 
        SpringApplication.run(SpringBootAdminApplication.class, args);
    

🚩
如果想要在war包中配置Spring Boot Admin Server,并部署在servlet容器中,请查看 spring-boot-admin-sample-war

另外可以参考spring-boot-admin-sample-servlet项目,该项目增加了安全性校验

2.2 注册客户端应用程序

要在Spring Boot Admin Server(后面简称SBA) 注册您的应用程序,您可以包含SBA客户端或使用Spring Cloud Discovery(如Eureka,Consul等),SBA服务端也提供静态配置选项。

2.2.1 Spring Boot Admin 客户端

每个要注册的应用程序都必须包含Spring Boot Admin Client,为了更好的保护端点,也将spring-boot-starter-security添加到依赖中。

1.将spring-boot-admin-starter-client 添加到依赖中
pom.xml

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
    <version>2.5.1</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2.配置SBA Server 的URL来开启SBA Client
application.properties

#SBA Server 注册地址
spring.boot.admin.client.url=http://localhost:8080  
#公开所有端点,生产环境应该仔细选择要公开的端点
management.endpoints.web.exposure.include=*  

3.使actuator端点可访问

@Configuration
public static class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter 
    @Override
    protected void configure(HttpSecurity http) throws Exception 
        http.authorizeRequests().anyRequest().permitAll()  
            .and().csrf().disable();
    

permitAll为了简洁起见,这里禁用了安全校验。查看安全部分了解如何处理安全端点。

2.2.2 Spring Cloud Discovery

如果您已经使用了Spring Cloud Discovery,那么不需要SBA客户端。只需要将DiscoveryClient添加到Spring Boot Admin Server中,其余部分由AutoConfiguration自动完成。

下面的示例使用了Eureka,但也支持其他实现了Spring Cloud Discovery的注册中心。点击链接查看ConsulZookeeper的例子。

其他,请看Spring Cloud 文档

1.添加spring-cloud-starter-eureka 到依赖中
pom.xml

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2.添加@EnableDiscoveryClient配置来开启发现

@Configuration
@EnableAutoConfiguration
@EnableDiscoveryClient
@EnableScheduling
@EnableAdminServer
public class SpringBootAdminApplication 
    public static void main(String[] args) 
        SpringApplication.run(SpringBootAdminApplication.class, args);
    

    @Configuration
    public static class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter 
        @Override
        protected void configure(HttpSecurity http) throws Exception 
            http.authorizeRequests().anyRequest().permitAll()  
                .and().csrf().disable();
        
    

permitAll为了简洁起见,这里禁用了安全校验。查看安全部分了解如何处理安全端点。

3.配置Eureka客户端
application.yml

#配置eureka客户端
eureka:   
  instance:
    leaseRenewalIntervalInSeconds: 10
    health-check-url-path: /actuator/health
    metadata-map:
      startup: $random.int    #重新启动后需要触发信息和端点的更新
  client:
    registryFetchIntervalSeconds: 5
    serviceUrl:
      defaultZone: $EUREKA_SERVICE_URL:http://localhost:8761/eureka/

management:
  endpoints:
    web:
      exposure:
        include: "*"  #公开所有端点,生产环境应该仔细选择要公开的端点
  endpoint:
    health:
      show-details: ALWAYS

其他参考 spring-boot-admin-sample-eureka示例。

🚩
您可以将SBA Server包含在Eureka的服务端中,同上面的配置,另外设置spring.boot.admin.context-path为不同的地址,以避免SBA UI 不会与Eureka的产生冲突。

阿提说说(itsaysay),PM:2022年7月2日01:08:02

2.2.3 使用Pyctuator注册Python应用

您可以轻松的使用Pyctuator将SBA和Flask或者FastAPI集成。

下面的步骤使用Flask,但是也支持其他web框架。请查看Pyctuator文档浏览支持的框架和功能列表。

1.安装pyctuator

pip install pyctuator

2.开启pyctuator,将其指向Flask应用程序,并配置Spring Boot Admin地址

import os
from flask import Flask
from pyctuator.pyctuator import Pyctuator

app_name = "Flask App with Pyctuator"
app = Flask(app_name)


@app.route("/")
def hello():
    return "Hello World!"


Pyctuator(
    app,
    app_name,
    app_url="http://example-app.com",
    pyctuator_endpoint_url="http://example-app.com/pyctuator",
    registration_url=os.getenv("SPRING_BOOT_ADMIN_URL")
)

app.run()

更多功能和示例,请查看Pyctuator文档示例

3.客户端应用

3.1 在Application列表显示版本

对于Spring Boot应用程序来说,显示版本最简单的办法是使用spring-boot-maven-plugin生成build-info文件META-INF/build-info.properties。另请参考Spring Boot参考指南

对于非Spring Boot应用程序,您也可以添加version或build.version注册元数据,版本将显示在Application列表中。
pom.xml

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>build-info</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

3.2 JMX-Bean 管理

要在admin UI中使用JMX-beans,必须将Jolokia引入到您的应用程序中。由于Jolokia是基于servlet的,所以不支持响应式应用程序。如果您已经引入了spring-boot-admin-starter-client,它会被自动引入,如果没有就需要添加Jolokia依赖。在Spring Boot 2.2.0中,如果您想要通过JMX管理Spring beans,您需要设置spring.jmx.enabled=true
pom.mxl

<dependency>
    <groupId>org.jolokia</groupId>
    <artifactId>jolokia-core</artifactId>
</dependency>

3.3 日志文件查看器

默认情况下,日志文件无法通过actuator端点访问。为了开启日志文件端点,您需要配置Spring Boot 以生成日志文件,方法是设置logging.file.path或者logging.file.name

SBA还支持ANSI颜色转义,您需要设置自定义日志文件,SBA 日志默认是不使用颜色的。

application.properties

#日志写入目标文件
logging.file.name=/var/log/sample-boot-application.log 
#日志文件使用ANSI颜色转义
logging.pattern.file=%clr(%dyyyy-MM-dd HH:mm:ss.SSS)faint %clr(%5p) %clr($PID)magenta %clr(---)faint %clr([%15.15t])faint %clr(%-40.40logger39)cyan %clr(:)faint %m%n%wEx

3.4 每个实例显示标签

Tags是一种为每个实例添加可视标记的方法,它们将出现在应用程序列表以及实例视图中。默认情况下,不向实例添加任何标记,由客户端通过向元数据或信息端点添加信息来指定所需的标记。

application.properties

#使用元数据
spring.boot.admin.client.instance.metadata.tags.environment=test

#使用info端点
info.tags.environment=test

3.5 Spring Boot Admin Client

Spring Boot Admin Client 会向Admin 服务端注册应用程序。这是通过Client定期向Admin服务端发送HTTP POST请求来完成的。

🚩
SBA客户端注册应用程序有很多属性可以使用,如果这不符合您的需求,您可以自己实现ApplicationFactory。

Table 1. Spring Boot Admin Client 属性配置选项

Property nameDescriptionDefault value
spring.boot.admin.client.enabled开启 Spring Boot Admin 客户端true
spring.boot.admin.client.url要注册的SBA服务端地址列表,逗号分割。这会触发强制性自动配置
spring.boot.admin.client.api-path管理Admin服务端上注册端点的HTTP路径"instances"
spring.boot.admin.client.username spring.boot.admin.client.password使用用户名和密码保护SBA服务端的API
spring.boot.admin.client.period重复注册间隔(毫秒)10,000
spring.boot.admin.client.connect-timeout注册应用时的连接超时时间(毫秒)5,000
spring.boot.admin.client.read-timeout注册应用时的读取超时时间(毫秒)5,000
spring.boot.admin.client.auto-registration为true时,表示在应用程序准备就绪后通过定时任务自动注册应用true
spring.boot.admin.client.auto-deregistrationture时,启用在关闭上下文时自动注销SBA服务端上的应用,如果没有设置,但检测到正在运行的CloudPlatform时,该功能会处于活动状态null
spring.boot.admin.client.register-once为true,则客户端将(按照“spring.boot.admin.instance.url”定义的顺序)仅针对一个SBA服务端进行注册;如果该SBA服务端关闭,则将自动注册到下一个服务端。如果为false,将针在所有的服务端进行注册。true
spring.boot.admin.client.instance.health-url健康检测URL。如果URL不同(如:Docker),则可以覆盖,但必须唯一Guessed based on management-url and endpoints.health.id.
spring.boot.admin.client.instance.management-base-url用于计算要注册的管理URL的基本URL。该路径是在运行时推断的,并附加到基本URLGuessed based on management.port, service-url and server.servlet-path.
spring.boot.admin.client.instance.management-url要注册的management-url。如果可访问的URL不同(例如Docker),则可以覆盖Guessed based on management-base-url and management.context-path.
spring.boot.admin.client.instance.service-base-url用于计算要注册的service-url的基本URL。该路径是在运行时推断的,并附加到基本URL。在Cloudfoundry中,可以像下面这样切换到https:spring.boot.admin.client.instance.service-base-url=https://$vcap.application.uris[0]Guessed based on hostname, server.port.
spring.boot.admin.client.instance.service-url要注册的服务网址。如果可访问的URL不同(例如Docker),则可以覆盖Guessed based on service-base-url and server.context-path.
spring.boot.admin.client.instance.service-path要注册的service-path,如果路径不同(如用编程方式设置的context-path),则可以覆盖。/
spring.boot.admin.client.instance.name要注册的实例名称如果设置了$spring.application.name ,那么原来的值将被覆盖
spring.boot.admin.client.instance.prefer-ip使用ip地址而不是主机名,如果server.address / management.address已经设置,则可以使用,否则从InetAddress.getLocalHost()获取false
spring.boot.admin.client.instance.metadata.*要与此实例相关联的元数据键值对
spring.boot.admin.client.instance.metadata.tags.*要与此实例相关联的Tags键值对

Table 2.实例元数据

KeyValueDefault value
user.name user.password访问端点的凭证

4.Spring Boot Admin Server

4.1 在反向代理下面运行

如果SBA 服务端运行在反向代理服务器下面,可能需要进行配置,可以通过(spring.boot.admin.ui.public-url)来访问服务器的公共url。另外当反向代理终止https连接时,可能需要配置server.forward-headers-strategy=native (also see Spring Boot Reference Guide)。

4.2 属性配置选项

Property nameDescriptionDefault value
spring.boot.admin.server.enabled开启 Spring Boot Admin Server.true
spring.boot.admin.context-path用作Admin Server静态资源和API路径的前缀,相当于Dispatcher-Servlet
spring.boot.admin.monitor.status-interval检查实例状态的时间间隔10,000ms
spring.boot.admin.monitor.status-lifetime状态的生存期。只要最后一个状态未过期,状态就不会更新。10,000ms
spring.boot.admin.monitor.info-interval检查实例信息的时间间隔。1m
spring.boot.admin.monitor.info-lifetime信息的生存期。只要最后一条信息未过期,该信息就不会更新。1m
spring.boot.admin.monitor.default-timeout发出请求时的默认超时。可以使用覆盖特定端点的单个值spring.boot.admin.monitor.timeout.*.10,000
spring.boot.admin.monitor.timeout.*端点ID和超时时间的Key-Value键值对。 默认为默认超时。
spring.boot.admin.monitor.default-retries失败请求的默认重试次数。Modyfing请求(PUT,POST,PATCH,DELETE)将永远不会重试。spring.boot.admin.monitor.retries.*可以覆盖指定端点的单个值0
spring.boot.admin.monitor.retries.*键值对,端点ID的重试次数。默认为默认重试。Modyfing请求(PUT,POST,PATCH,DELETE)将永远不会重试
spring.boot.admin.metadata-keys-to-sanitize要被过滤掉的元数据(当与正则表达式相匹配时,这些数据会在输出的json数据中过滤掉)".**password$", ".\\*secret$", ".\\*key$", ".\\*token$", ".\\*credentials.**", ".*vcap_services$"
spring.boot.admin.probed-endpointsSpring Boot 1.x 版本指定的检查端点,如果路径与id不同,您可以将其指定为id:path(如health:ping)"health", "env", "metrics", "httptrace:trace", "threaddump:dump", "jolokia", "info", "logfile", "refresh", "flyway", "liquibase", "heapdump", "loggers", "auditevents"
spring.boot.admin.instance-auth.enabled启用从spring配置属性中提取凭据true
spring.boot.admin.instance-auth.default-user-name用于对注册服务进行身份认证的默认用户名。spring.boot.admin.instance-auth.enabled 配置必须是truenull
spring.boot.admin.instance-auth.default-password用于对注册服务进行身份认证的默认用户密码。spring.boot.admin.instance-auth.enabled 配置必须是 true.null
spring.boot.admin.instance-auth.service-map.*.user-name用于对指定名称的注册服务进行身份验证的用户名。 spring.boot.admin.instance-auth.enabled 必须是 true.
spring.boot.admin.instance-auth.service-map.*.user-password用于对指定名称的注册服务进行身份验证的用户密码。 spring.boot.admin.instance-auth.enabled 必须是 true.
spring.boot.admin.instance-proxy.ignored-headers不向客户端发送的header"Cookie", "Set-Cookie", "Authorization"
spring.boot.admin.ui.public-url用于在ui中构建基本href的基本URL如果在反向代理后面运行(使用路径重写),则可用于进行正确的自我引用。如果省略了主机/端口,将从请求中推断出来
spring.boot.admin.ui.brand导航栏中显示的品牌"<img src="assets/img/icon-spring-boot-admin.svg"><span>Spring Boot Admin</span>"
spring.boot.admin.ui.title要显示的页面标题"Spring Boot Admin"
spring.boot.admin.ui.login-icon登录页面上的图标"assets/img/icon-spring-boot-admin.svg"
spring.boot.admin.ui.favicon用作默认图标的图标,用于桌面通知的图标"assets/img/favicon.png"
spring.boot.admin.ui.favicon-danger当一项或多项服务关闭并用于桌面通知时,用作网站图标"assets/img/favicon-danger.png"
spring.boot.admin.ui.remember-me-enabled登录界面remember-me开关true
spring.boot.admin.ui.poll-timer.cache获取新缓存数据的轮询持续时间(毫秒)2500
spring.boot.admin.ui.poll-timer.datasource获取新数据源数据的轮询持续时间(毫秒)2500
spring.boot.admin.ui.poll-timer.gc获取新gc数据的轮询持续时间(毫秒)2500
spring.boot.admin.ui.poll-timer.process获取新过程数据的轮询持续时间(毫秒)2500
spring.boot.admin.ui.poll-timer.memory获取新内存数据的轮询持续时间(毫秒)2500
spring.boot.admin.ui.poll-timer.threads获取新线程数据的轮询持续时间(毫秒)2500

4.3 Spring Cloud Discovery

SBA 服务端能通过DiscoveryClient发现应用程序。优点是客户端不需要引入spring-boot-admin-starter-client依赖。你只需要添加一个DiscoveryClient的实现,其他都有AutoConfiguration自动完成。

4.3.1 SimpleDiscoveryClient静态配置

Spring Cloud 提供了SimpleDiscoveryClient。它允许您通过静态配置来指定客户端应用程序。
pom.xml

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

application.yml

spring:
  cloud:
    discovery:
      client:
        simple:
          instances:
            test:
              - uri: http://instance1.intern:8080
                metadata:
                  management.context-path: /actuator
              - uri: http://instance2.intern:8080
                metadata:
                  management.context-path: /actuator

4.3.2 其他DiscoveryClients

Spring Boot Admin 支持所有实现了Spring Cloud DiscoveryClient的组件(如Eureka, Zookeeper, Consul…)。您需要添加它到Spring Boot Admin Server中,并正确配置。

4.3.3 转换ServiceInstances

服务注册信息通过ServiceInstanceConverter转换,SBA附带默认转换和Eureka的转换实现。通过AutoConfiguration会自动选择一个正确的实现。

🚩
您可以使用SBA服务端配置选项和实例的元数据来修改注册表中的信息。元数据中的值优先于服务器配置。如果配置选项不满足需求,您可以提供自己的ServiceInstanceConverter

❗️
当使用Eureka时,已经知道了healthCheckUrl用于Eureka监控检查,您可以在Eureka的客户端配置eureka.instance.healthCheckUrl

Table 3. 实例元数据选项

KeyValueDefault value
user.name user.password用于访问端点的凭据。
management.scheme该scheme值在service URL中替换以便访问actuator端点。
management.address该address值在service URL中替换以便访问actuator端点。
management.port该port值在service URL中替换以便访问actuator端点。
management.context-path该路径将会追加在service URL中,用于访问actuator端点$spring.boot.admin.discovery.converter.management-context-path
health.path该路径将会追加在service URL中,用于健康检查。忽略 EurekaServiceInstanceConverter.$spring.boot.admin.discovery.converter.health-endpoint

Table 4. Discovery配置选项

Property nameDescriptionDefault value
spring.boot.admin.discovery.enabled启用对Admin 服务端的DiscoveryClient支持true
spring.boot.admin.discovery.converter.management-context-pathDefaultServiceInstanceConverter转换management-url时,将附加到发现服务的服务url。/actuator
spring.boot.admin.discovery.converter.health-endpoint-path当使用DefaultServiceInstanceConverter转换health-url时,将附加到management-url中。"health"
spring.boot.admin.discovery.ignored-services在使用发现和未注册为应用程序时,将忽略此服务。支持简单模式(例如"foo*", "*bar", "foo*bar*")。
spring.boot.admin.discovery.services在使用发现和未注册为应用程序时,将包含此服务。支持简单模式(例如"foo*", "*bar", "foo*bar*")。"*"
spring.boot.admin.discovery.ignored-instances-metadata如果服务实例至少包含一个与此列表匹配的元数据项,则将忽略这些实例。(e.g. “discoverable=false”)
spring.boot.admin.discovery.instances-metadata如果服务实例包含至少一个与此列表匹配的元数据项,则将包括这些实例。 (e.g. “discoverable=true”)

4.3.4 CloudFoundry

如果您将应用部署在CloudFoundry,那么vcap.application.application_idvcap.application.instance_index必须配置在元数据中,以便正确注册到SBA 服务中。如下是关于Eureka的简单示例:

application.yml

eureka:
  instance:
    hostname: $vcap.application.uris[0]
    nonSecurePort: 80
    metadata-map:
      applicationId: $vcap.application.application_id
      instanceId: $vcap.application.instance_index

4.4 集群

Spring Boot Admin Server支持通过Hazelcast进行群集复制。当存在HazelcastConfig或HazelcastInstance Bean时,它会自动启用。您还可以将Hazelcast配置为持久的,以便在重新启动时保持该状态。另请参阅 Spring Boot support for Hazelcast

  1. 添加Hazelcast依赖
    pom.xml
<dependency>
    <groupId>com.hazelcast</groupId>
    <artifactId>hazelcast</artifactId>
</dependency>
  1. 实例化HazelcastConfig
@Bean
public Config hazelcastConfig() 
  // 用于存储事件的map
  // 应该要可靠的保存数据,如果事件太多,Spring Boot Admin将会进行压缩
  MapConfig eventStoreMap = new MapConfig(DEFAULT_NAME_EVENT_STORE_MAP).setInMemoryFormat(InMemoryFormat.OBJECT)
      .setBackupCount(1)
      .setMergePolicyConfig(new MergePolicyConfig(PutIfAbsentMergePolicy.class.getName(), 100));

  // 该map用于清除通知中的重复数据。
 //如果此映射中的数据丢失,这应该不是一个大问题,因为这将导

以上是关于Spring Boot Admin 参考指南的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot Admin指南2.4.1

Spring Boot Admin 微服务监控管理

Spring Boot Admin 微服务监控管理

Spring Boot Admin + Docker 部署服务

Spring Boot Admin2 实例状态监控详解

Spring Boot 参考指南 - 从 app.groovy 示例中获取 404