springboot admin基础教程

没有谁是因为一时冲动而离开你的,那些难过无助又一次次忍耐的眼泪你都看不见。就像堤坝下逐渐因侵蚀而拓宽的裂缝,你看见的,只是它崩溃的那个瞬间

Posted by yishuifengxiao on 2021-01-19

Spring Boot Admin是一个以代码为中心的社区项目,用于管理和监视Spring Boot®应用程序。 这些应用程序通过HTTP在我们的Spring Boot Admin Client中注册,或者是通过Spring Cloud®(例如,Eureka,Consul)发现的。 UI只是Spring Boot Actuator端点之上的Vue.js应用程序。

使用Pyctuator可获得对Python应用程序的支持。

Spring Boot Admin 的源码参见 https://github.com/codecentric/spring-boot-admin

Spring Boot Admin 的文档参见 https://codecentric.github.io/spring-boot-admin/2.3.1/

一 快速启动

1.1 设置Spring Boot Admin Server

首先,您需要设置服务器。 为此,只需设置一个简单的启动项目(使用start.spring.io)。 由于Spring Boot Admin Server能够作为servlet或webflux应用程序运行,因此您需要对此进行决定并添加相应的Spring Boot Starter。 在此示例中,我们使用Servlet Web Starter。

1 首先在项目里添加以下依赖

1
2
3
4
5
6
7
8
9
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

注意spring-boot-admin-starter-server里已经包含了以下依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-cloud</artifactId>
<version>2.3.1</version>
</dependency>

在配置时无须重复添加。

2 接下来在项目里添加以下代码

1
2
3
4
5
6
7
8
@Configuration
@EnableAutoConfiguration
@EnableAdminServer
public class SpringBootAdminApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAdminApplication.class, args);
}
}

注意不要忘了添加@EnableAdminServer注解

配置后启动项目,即可通过 http://localhost:8080/ 访问了。

1.2 配置Spring Boot Admin Client

要在SBA服务器上注册您的应用程序,您可以包括SBA客户端或使用Spring Cloud Discovery(例如Eureka,Consul等)。 在SBA服务器端,还有一个使用静态配置的简单选项。

每个要注册的应用程序都必须包含Spring Boot Admin Client。 为了保护端点,还添加了spring-boot-starter-security。

1 首先在项目里添加以下依赖

1
2
3
4
5
6
7
8
9
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

注意,在spring-boot-admin-starter-client中已经包含了以下依赖

1
2
3
4
5
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-client</artifactId>
<version>2.3.1</version>
</dependency>

spring-boot-admin-client中则又包含了

1
2
3
4
5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.3.4.RELEASE</version>
</dependency>

因此在配置时如果时大型项目,需要关注下各个版本间的依赖关系,防止冲突。

2 接下来配置指向的Spring Boot Admin Server服务器地址

在配置文件里添加以下代码

1
2
spring.boot.admin.client.url=http://localhost:8080  
management.endpoints.web.exposure.include=*

在上述配置中,spring.boot.admin.client.url指向的是在1.1中配置的Spring Boot Admin Server服务器的地址

Spring Boot 2默认情况下大多数端点都不通过http公开的,在这里我们公开了所有端点。如果是在生产环境下,您应该仔细选择要公开的端点。

完成上述配置后,在 http://localhost:8080/ 即可观察监控信息了。

1.3 扩展配置

上述配置只是最简配置,可以观看基本的信息,如果需要监控各种的信息,可以进行扩展配置。

在配置文件里添加以下配置

1
2
3
4
5
# Actuator Web 访问端口
management.server.port=8081
management.endpoints.jmx.exposure.include=*
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

1.3.1 显示版本信息

对于Spring Boot应用程序,显示版本的最简单方法是使用spring-boot-maven-plugin中的build-info目标,该目标会生成META-INF / build-info.properties。 另请参阅《 Spring Boot参考指南》。

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

此时,需要在项目的pom文件里添加以下配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<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>

1.3.2 JMX-Bean Management

要在管理界面中与JMX bean进行交互,您必须在应用程序中包含Jolokia。 由于Jolokia是基于servlet的,因此不支持反应式应用程序。 如果您使用的是spring-boot-admin-starter-client,那么如果没有将Jolokia添加到您的依赖项中,它将为您使用。 在Spring Boot 2.2.0中,如果要通过JMX公开Spring Bean,则可能需要设置

1
spring.jmx.enabled = true。

然后再项目依赖里添加

1
2
3
4
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-core</artifactId>
</dependency>

1.3.3 日志文件查看器

默认情况下,日志文件无法通过执行器端点访问,因此在Spring Boot Admin中不可见。 为了启用日志文件执行器端点,您需要通过设置logging.file.path或logging.file.name来配置Spring Boot写入日志文件。

Spring Boot Admin将检测所有看起来像URL的内容,并将其呈现为超链接。

还支持ANSI颜色转义。 您需要设置一个自定义文件日志模式,因为Spring Boot的默认模式不使用颜色。

在配置文件里添加以下配置

1
2
logging.file.name=/var/log/sample-boot-application.log 
logging.pattern.file=%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID}){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx

1.3.4 按实例显示标签

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

在配置文件里添加以下配置

1
2
3
4
5
#using the metadata
spring.boot.admin.client.instance.metadata.tags.environment=test

#using the info endpoint
info.tags.environment=test

二 加入安全配置

在第一章的示例是没有添加安全配置的,无须登录就能查看所有的监控信息,这是在生产环境中是不合适的,需要加入安全配置,在这里对第一章中的示例进行以下安全改造。

2.1 Spring Boot Admin Server安全配置

由于在分布式Web应用程序中有多种解决认证和授权的方法,因此Spring Boot Admin并未提供默认方法。 默认情况下,spring-boot-admin-server-ui提供一个登录页面和一个注销按钮。

1 在项目的依赖里添加以下配置

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

2 在项目里添加以下文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package com.yishuifengxiao.common.adminserver;

import de.codecentric.boot.admin.server.config.AdminServerProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;

import java.util.UUID;

@Configuration(proxyBeanMethods = false)
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter {

private final AdminServerProperties adminServer;

public SecuritySecureConfig(AdminServerProperties adminServer) {
this.adminServer = adminServer;
}

@Override
protected void configure(HttpSecurity http) throws Exception {
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
successHandler.setDefaultTargetUrl(this.adminServer.path("/"));

http.authorizeRequests(
(authorizeRequests) ->
//授予公众对所有静态资产和登录页面的访问权限。
authorizeRequests.antMatchers(this.adminServer.path("/assets/**")).permitAll()
//其他所有请求都必须经过验证。
.antMatchers(this.adminServer.path("/login")).permitAll()
.anyRequest().authenticated() )
// 配置登录和注销。
.formLogin(
(formLogin) ->
formLogin.loginPage(this.adminServer.path("/login"))
.successHandler(successHandler).and() )
.logout((logout) ->
logout.logoutUrl(this.adminServer.path("/logout")))
.httpBasic(Customizer.withDefaults())
//启用HTTP基本支持。 这是Spring Boot Admin Client注册所必需的。
.csrf((csrf) ->
//使用Cookies启用CSRF保护
csrf.csrfTokenRepository(CookieCsrfTokenRepository
.withHttpOnlyFalse())
.ignoringRequestMatchers(
//禁用Spring Boot Admin Client用于(注销)注册的端点的CSRF-Protection。
new AntPathRequestMatcher(this.adminServer.path("/instances"),
HttpMethod.POST.toString()),
new AntPathRequestMatcher(this.adminServer.path("/instances/*"),
HttpMethod.DELETE.toString()),
//对执行器端点禁用CSRF-Protection。
new AntPathRequestMatcher(this.adminServer.path("/actuator/**"))
))
.rememberMe((rememberMe) -> rememberMe.key(UUID.randomUUID().toString())
.tokenValiditySeconds(1209600));
}

// Required to provide UserDetailsService for "remember functionality"
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//这里配置的用户是 user ,密码为 password
auth.inMemoryAuthentication().withUser("user").password("{noop}password").roles("USER");
}

}

完成上述配置后,重新启动项目,此时再次访问服务端 http://localhost:8080/ 就会跳转到登录页面,登录页面的用户名为在上面配置的 user ,密码为上面配置的 password 。

在服务端添加安全配置后,此时客户端不能直接注册到服务器上,需要添加安全信息。

此时需要在客户端添加以下配置

1
2
spring.boot.admin.client.username=user
spring.boot.admin.client.password=password

这里配置的用户名和密码是服务端配置的用户名和密码。

2.2 Spring Boot Admin Client安全配置

在上述所有的配置中,客户端均未添加安全配置,当使用HTTP Basic身份验证保护执行器端点时,SBA Server需要凭据才能访问它们。 您可以在注册应用程序时在元数据中提交凭据。 然后,BasicAuthHttpHeaderProvider使用此元数据添加Authorization标头,以访问应用程序的执行器端点。 您可以提供自己的HttpHeadersProvider来更改行为(例如添加一些解密)或添加额外的标头。

SBA服务器会屏蔽HTTP接口中的某些元数据,以防止敏感信息泄漏。

通过元数据提交凭据时,应为SBA服务器或(服务注册表)配置HTTPS。

使用Spring Cloud Discovery时,您必须知道任何可以查询您的服务注册表的人都可以获取证书。

使用这种方法时,SBA Server会决定用户是否可以访问注册的应用程序。 (使用OAuth2)可以使用更复杂的解决方案,让客户端决定用户是否可以访问端点。 为此,请查看joshiste / spring-boot-admin-samples中的示例。

此时,需要在客户端的配置文件里添加以下配置

1
2
3
4
5
6
spring.boot.admin.client:
url: http://localhost:8080
instance:
metadata:
user.name: ${spring.security.user.name}
user.password: ${spring.security.user.password}

2.3 SBA服务器

您可以通过管理服务器中的配置属性指定凭据。

要启用从属性中提取凭据,spring.boot.admin.instance-auth.enabled属性必须为true(默认值)。

如果您的客户通过元数据(即通过服务注释)提供凭据,则将使用该元数据代替属性。

您可以通过设置spring.boot.admin.instance-auth.default-user-name和spring.boot.admin.instance-auth.default-user-password来提供默认的用户名和密码。 (可选)您可以使用spring.boot.admin.instance-auth.service-map。。user-name模式为特定服务(按名称)提供凭据,用服务名称替换

application.yml

1
2
3
4
5
6
7
8
9
10
11
12
spring.boot.admin:
instance-auth:
enabled: true
default-user-name: "${some.user.name.from.secret}"
default-user-password: "${some.user.password.from.secret}"
service-map:
my-first-service-to-monitor:
user-name: "${some.user.name.from.secret}"
user-password: "${some.user.password.from.secret}"
my-second-service-to-monitor:
user-name: "${some.user.name.from.secret}"
user-password: "${some.user.password.from.secret}"

2.4 Eureka中配置

application.yml

1
2
3
4
5
eureka:
instance:
metadata-map:
user.name: ${spring.security.user.name}
user.password: ${spring.security.user.password}

2.5 CSRF on Actuator Endpoints

一些执行器端点(例如/ loggers)支持POST请求。 使用Spring Security时,您需要忽略CSRF-Protection的执行器端点,因为Spring Boot Admin Server当前缺乏支持。

1
2
3
4
5
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf()
.ignoringAntMatchers("/actuator/**");
}

三 微服务监控

3.1 Spring Cloud Discovery

如果您已经将Spring Cloud Discovery用于您的应用程序,则不需要SBA客户端。 只需将DiscoveryClient添加到Spring Boot Admin Server中,其余的由我们的自动配置完成。

以下步骤使用Eureka,但也支持其他Spring Cloud Discovery实施。 有使用Consul和Zookeeper的示例。

1 首先添加spring-cloud-starter-eureka依赖

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

2 添加文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Configuration
@EnableAutoConfiguration
@EnableDiscoveryClient
@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();
}
}
}

为了简洁起见,我们暂时禁用安全性。 查看有关如何处理安全终结点的安全性部分。

3 告诉Eureka客户端在哪里可以找到服务注册表:

application.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
eureka:   #Eureka客户端的配置部分
instance:
leaseRenewalIntervalInSeconds: 10
health-check-url-path: /actuator/health
metadata-map:
startup: ${random.int} #needed to trigger info and endpoint update after restart
client:
registryFetchIntervalSeconds: 5
serviceUrl:
defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/

management:
endpoints:
web:
exposure:
include: "*" #与Spring Boot 2一样,默认情况下,大多数端点都不通过http公开,我们公开了所有端点。 对于生产,您应该仔细选择要公开的端点。
endpoint:
health:
show-details: ALWAYS

您可以将Spring Boot Admin Server包含到Eureka服务器中。 如上所述设置所有内容,并将spring.boot.admin.context-path设置为不同于“ /”的名称,以使Spring Boot Admin Server用户界面不会与Eureka的用户界面冲突。

更多细节参见官方示例程序 spring-boot-admin-sample-eureka

3.2 Spring Clouds DiscoveryClient

Spring Boot Admin Server可以使用Spring Clouds DiscoveryClient来发现应用程序。 这样做的好处是客户端不必包括spring-boot-admin-starter-client。 您只需将DiscoveryClient实现添加到管理服务器-其他所有操作均由自动配置完成。

1 使用SimpleDiscoveryClient进行静态配置

Spring Cloud提供了一个SimpleDiscoveryClient。 它允许您通过静态配置指定客户端应用程序:

pom.xml

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>

application.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
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

Spring Boot Admin支持Spring Cloud的DiscoveryClient的所有其他实现(Eureka,Zookeeper,Consul等)。 您需要将其添加到Spring Boot Admin Server并正确配置。 上面显示了使用Eureka的示例设置。

3.3 转换服务实例

服务注册表中的信息由ServiceInstanceConverter转换。 Spring Boot Admin附带了默认和Eureka转换器实现。 通过自动配置选择正确的一个。

您可以使用SBA Server配置选项和实例元数据来修改来自注册表的信息如何用于注册应用程序。 元数据中的值优先于服务器配置。 如果大量选项无法满足您的需求,则可以提供自己的ServiceInstanceConverter。

使用Eureka时,会使用Eureka已知的healthCheckUrl进行健康检查,可以使用eureka.instance.healthCheckUrl在您的客户端上进行设置。

实例元数据选项(Instance metadata options

Key Value Default value
user.name user.password 用于访问端点的凭据。
management.scheme 该方案将替换为服务URL,并将用于访问执行器端点。
management.address 该地址将替换为服务URL,并将用于访问执行器端点。
management.port 该端口将替换为服务URL,并将用于访问执行器端点。
management.context-path 该路径将附加到服务URL,并将用于访问执行器端点。 ${spring.boot.admin.discovery.converter.management-context-path}
health.path 该路径将附加到服务URL,并将用于运行状况检查。 被EurekaServiceInstanceConverter忽略。 ${spring.boot.admin.discovery.converter.health-endpoint}

发现配置选项(Discovery configuration options)

Property name Description Default value
spring.boot.admin.discovery.enabled 为管理服务器启用DiscoveryClient支持。 true
spring.boot.admin.discovery.converter.management-context-path 由DefaultServiceInstanceConverter转换管理URL时,将附加到发现的服务的服务URL上 /actuator
spring.boot.admin.discovery.converter.health-endpoint-path 当HealthURL由DefaultServiceInstanceConverter转换时,将附加到发现的服务的管理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 如果服务实例包含至少一个与此列表匹配的元数据项,则将忽略它们。 (例如,“ discoverable = false”)
spring.boot.admin.discovery.instances-metadata 如果服务实例包含至少一个与此列表匹配的元数据项,则将包括这些实例。 (例如“ discoverable = true”)

如果要将应用程序部署到CloudFoundry,则必须将vcap.application.application_id和vcap.application.instance_index添加到元数据中,以便在Spring Boot Admin Server中正确注册应用程序。 这是Eureka的示例配置:

application.yml

1
2
3
4
5
6
7
eureka:
instance:
hostname: ${vcap.application.uris[0]}
nonSecurePort: 80
metadata-map:
applicationId: ${vcap.application.application_id}
instanceId: ${vcap.application.instance_index}

四 详细配置

4.1 客户端详细配置

Spring Boot Admin Client在管理服务器上注册应用程序。 这是通过定期向SBA服务器发出HTTP发布请求来提供有关应用程序的信息来完成的。

有许多属性可以影响SBA客户端注册应用程序的方式。 如果不符合您的需求,您可以提供自己的ApplicationFactory实现。

Property name Description Default value
spring.boot.admin.client.enabled 启用Spring Boot Admin Client。 true
spring.boot.admin.client.url 要在其中注册的Spring Boot Admin服务器的URL的逗号分隔排序列表。 这将触发自动配置。 必选
spring.boot.admin.client.api-path 管理服务器上注册端点的Http路径。 "instances"
spring.boot.admin.client.username spring.boot.admin.client.password 如果SBA Server api受HTTP Basic身份验证保护,则为用户名和密码。
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-deregistration 当上下文关闭时,切换为在Spring Boot Admin服务器上启用自动解密。 如果未设置该值,则在检测到正在运行的CloudPlatform时,该功能将处于活动状态。 null
spring.boot.admin.client.register-once 如果设置为true,则客户端将仅在一个管理服务器上注册(按spring.boot.admin.instance.url定义的顺序); 如果该管理服务器出现故障,将自动向下一个管理服务器注册。 如果为false,则会向所有管理服务器注册。 true
spring.boot.admin.client.instance.health-url 要注册的健康网址。 如果可访问URL不同(例如Docker),则可以覆盖。 在注册表中必须唯一。 Guessed based on management-url and endpoints.health.id.
spring.boot.admin.client.instance.management-base-url 用于计算要注册的管理URL的基本URL。 该路径是在运行时推断的,并附加到基本URL。 Guessed based on management.port, service-url and server.servlet-path.
spring.boot.admin.client.instance.management-url 要注册的管理网址。 如果可访问的网址不同(例如Docker),则可以覆盖。 Guessed based on management-base-url and management.context-path.
spring.boot.admin.client.instance.service-base-url 用于计算要注册的服务URL的基本URL。 该路径是在运行时推断的,并附加到基本URL。 在Cloudfoundry环境中,您可以像这样切换到 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 要注册的服务网址。 如果可访问的网址不同(例如Docker),则可以覆盖。 Guessed based on service-base-url and server.context-path.
spring.boot.admin.client.instance.service-path 要注册的服务路径。 在可达路径不同的情况下可以覆盖(例如,以编程方式设置的上下文路径)。 /
spring.boot.admin.client.instance.name 要注册的名称。 ${spring.application.name} if set, "spring-boot-application" otherwise.
spring.boot.admin.client.instance.prefer-ip 在猜测的网址中使用ip地址而不是主机名。 如果设置了server.address / management.address,它将被使用。 否则,将使用从InetAddress.getLocalHost()返回的IP地址。 false
spring.boot.admin.client.instance.metadata.* 要与此实例相关联的元数据键值对。
spring.boot.admin.client.instance.metadata.tags.* 标记作为要与此实例相关联的键值对。

4.2 服务端详细配置

如果Spring Boot Admin服务器在反向代理后面运行,则可能需要配置该服务器可通过(spring.boot.admin.ui.public-url)到达的公共URL。 此外,当反向代理终止https连接时,可能需要配置

1
server.forward-headers-strategy = native
Property name Description Default value
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.* 每个EndpointId都有超时的键值对。 默认为默认超时。
spring.boot.admin.monitor.default-retries 失败请求的默认重试次数。 永远不会重试修改请求(PUT,POST,PATCH,DELETE)。 可以使用spring.boot.admin.monitor.retries。*覆盖特定端点的各个值。 0
spring.boot.admin.monitor.retries.* 键值对,具有每个endpointId的重试次数。 默认为默认重试。 永远不会重试修改请求(PUT,POST,PATCH,DELETE)
spring.boot.admin.metadata-keys-to-sanitize 匹配这些正则表达式模式的键的元数据值将在所有json输出中被清除。 ".**password$", ".\*secret$", ".\*key$", ".\*token$", ".\*credentials.**", ".*vcap_services$"
spring.boot.admin.probed-endpoints 对于Spring Boot 1.x客户端应用程序,SBA使用OPTIONS请求探测指定的端点。 如果路径与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属性必须为true。 null
spring.boot.admin.instance-auth.default-user-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 向客户提出请求时,不转发标题。 "Cookie", "Set-Cookie", "Authorization"
spring.boot.admin.ui.public-url 用于在ui中建立基本href的基本URL。 If running behind a reverse proxy (using path rewriting) this can be used to make correct self references. If the host/port is omitted it will be inferred from the request.
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 切换为在登录页面上显示/隐藏“记住我”复选框。 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

五 监控通知

邮件通知将作为使用Thymeleaf模板呈现的HTML电子邮件进行传递。 要启用邮件通知,请使用spring-boot-starter-mail配置JavaMailSender并设置收件人。

为了防止泄露敏感信息,默认邮件模板不显示实例的任何元数据。 如果要显示一些元数据,则可以使用自定义模板。

1 将spring-boot-starter-mail添加到您的依赖项

pom.xml

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2 配置一个JavaMailSender

application.properties

1
2
spring.mail.host=smtp.example.com
spring.boot.admin.notify.mail.to=admin@example.com

3 详细配置

Property name Description Default value
spring.boot.admin.notify.mail.enabled 启用邮件通知 true
spring.boot.admin.notify.mail.ignore-changes 以逗号分隔的状态更改列表将被忽略。 格式:“ <从状态>:<至状态>”。 允许使用通配符。 "UNKNOWN:UP"
spring.boot.admin.notify.mail.template 用于渲染的Thymeleaf模板的资源路径。 "classpath:/META-INF/spring-boot-admin-server/mail/status-changed.html"
spring.boot.admin.notify.mail.to 逗号分隔的邮件收件人列表 "root@localhost"
spring.boot.admin.notify.mail.cc 逗号分隔的复本收件人列表
spring.boot.admin.notify.mail.from Mail sender "Spring Boot Admin <noreply@localhost>"
spring.boot.admin.notify.mail.additional-properties 可以从模板访问的其他属性

六 自定义配置

6.1 自定义通知程序

您可以通过添加实现Notifier接口的Spring Bean来添加自己的Notifier,最好是扩展AbstractEventNotifier或AbstractStatusChangeNotifier。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class CustomNotifier extends AbstractEventNotifier {

private static final Logger LOGGER = LoggerFactory.getLogger(LoggingNotifier.class);

public CustomNotifier(InstanceRepository repository) {
super(repository);
}

@Override
protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
return Mono.fromRunnable(() -> {
if (event instanceof InstanceStatusChangedEvent) {
LOGGER.info("Instance {} ({}) is {}", instance.getRegistration().getName(), event.getInstance(),
((InstanceStatusChangedEvent) event).getStatusInfo().getStatus());
}
else {
LOGGER.info("Instance {} ({}) {}", instance.getRegistration().getName(), event.getInstance(),
event.getType());
}
});
}

}

6.2 注入自定义HTTP标头

如果您需要将自定义HTTP标头注入到对受监视应用程序的执行器端点的请求中,则可以轻松添加HttpHeadersProvider:

1
2
3
4
5
6
7
8
@Bean
public HttpHeadersProvider customHttpHeadersProvider() {
return (instance) -> {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("X-CUSTOM", "My Custom Value");
return httpHeaders;
};
}

6.3 拦截请求和响应

您可以通过实现InstanceExchangeFilterFunction接口来拦截和修改对受监视应用程序的执行器端点的请求和响应。 这对于审核或添加一些额外的安全检查很有用。

1
2
3
4
5
6
7
8
@Bean
public InstanceExchangeFilterFunction auditLog() {
return (instance, request, next) -> next.exchange(request).doOnSubscribe((s) -> {
if (HttpMethod.DELETE.equals(request.method()) || HttpMethod.POST.equals(request.method())) {
log.info("{} for {} on {}", request.method(), instance.getId(), request.url());
}
});
}

6.4 链接/嵌入外部页面

您可以非常简单地通过配置添加到外部页面的链接,甚至嵌入它们(添加iframe = true):

1
2
3
4
5
6
7
8
spring:
boot:
admin:
ui:
external-views:
- label: "🚀"
url: http://codecentric.de
order: 2000

6.5 自定义标题徽标和标题

您可以使用以下配置属性在标题中设置自定义信息(即显示登台信息或公司名称):

spring.boot.admin.ui.brand:此HTML代码段显示在导航标题中,默认为<img src =“ assets / img / icon-spring-boot-admin.svg”> <span> Spring Boot Admin </ span >。 默认情况下,它会显示SBA徽标及其名称。 如果要显示自定义徽标,则可以设置:spring.boot.admin.ui.brand = <img src =“ custom / custom-icon.png”>。 您只需将映像添加到/ META-INF / spring-boot-admin-server-ui /中的jar文件中(默认情况下,SBA会为此位置注册一个ResourceHandler),或者必须确保自己可以正确提供该映像 (例如,注册您自己的ResourceHandler)

spring.boot.admin.ui.title:使用此选项来自定义浏览器窗口标题。