您的当前位置:首页正文

SpringBootAdmin的使用详解

2023-09-22 来源:易榕旅网
SpringBootAdmin的使⽤详解

⼀、前⾔

Spring Boot Admin ⽤于监控基于 Spring Boot 的应⽤。官⽅⽂档在这⾥(v1.3.4):《》

实践的过程中,感觉这个 User Guide 结构上还是说的不太明⽩。所以我就⼤概写⼀遍我的实践过程与理解。阅读此⽂前提条件是:

使⽤过 Maven。

你跑过基于 Spring Boot 的 hello world 程序。

第三节需要你会点 Spring Cloud 的 Eureka Server 配置。⼆、在 Spring Boot 项⽬中配置

这种配置中,Spring Boot Admin 作为 Server,其他 Spring Boot 应⽤作为 Client,Client 把⾃⾝的信息“注册”到 Server,我们就能在 Server 上看到“注册”的 Spring Boot 应⽤的状态信息了。2.1、Server 端新建⼀个项⽬2.1.1、添加依赖pom.xml

de.codecentric

spring-boot-admin-server 1.3.4

de.codecentric

spring-boot-admin-server-ui 1.3.4

2.1.2、开启监控

添加 @EnableAdminServer 注解开启监控

@Configuration

@EnableAutoConfiguration@EnableAdminServer

public class SpringBootAdminApplication { public static void main(String[] args) {

SpringApplication.run(SpringBootAdminApplication.class, args); }}

这⾥未指定 Server 运⾏的端⼝,默认是 8080,如果要指定,则需要在 application.properties ⽂件中设置: application.properties

server.port=8080

2.2、Client 端2.2.1、添加依赖pom.xml

de.codecentric

spring-boot-admin-starter-client 1.3.4

这⾥的 spring-boot-admin-starter-client 会⾃动依赖 jolokia-core,jolokia是⽤于 JMX-bean 管理的。2.2.2、触发⾃动配置、指明 Server 注册地址

application.properties

spring.boot.admin.url=http://localhost:8080

2.3、开始管理2.4、显⽰应⽤版本

为了在 Spring Boot Admin 的应⽤管理列表显⽰被管理应⽤的版本号,你需要设置 info.version,例如使⽤ maven filtering: application.properties

info.version=@project.version@

这⾥设置显⽰的版本号为 Maven pom.xml 中的构建版本号。2.5、JMX-bean管理

JMX-bean 管理需要使⽤第三⽅的 ,因为 spring-boot-admin-starter-client 会⾃动依赖 jolokia-core,所以这⾥不需要显⽰依赖了,第三节的基于 Eureka 注册发现的配置中,就需要显⽰地依赖: pom.xml

org.jolokia jolokia-core

2.6、Loglevel 管理

当前⽇志级别管理仅限 Logback,通过 JMX 实现,所以需要依赖 jolokia 。同时,还需要配置 Logback 的JMXConfigurator: logback.xml

这个 logback.xml 放在与 application.properties 同级的⽬录就可以了,如果不配置 Logback,那么 Spring Boot Admin 就⽆法管理应⽤的⽇志级别。2.7、Server 端监控⾃⼰

以上的配置,基本就可以很好⼯作了。

但是有⼀个问题,我们没有监控作为 Server 端的 Spring Boot Admin ⾃⾝。如果要监控到 Server ⾃⼰,把 Server 端也当作是 Client ⼀样来配置就可以实现了:把 2.2.1、2.2.2、2.4、2.6 的步骤在 Server 端也配置⼀遍。三、在 Spring Cloud 项⽬的 Eureka 中配置

这⾥⽰例的 Spring Cloud 项⽬是使⽤ Eureka 来做注册/发现的,官⽅ Github ⽰例⾥有基于 Consul 和 Zookeper 的配置。配置好之后,Spring Boot Admin 就可以管理所有注册到 Eureka Server 的应⽤了,包括 Spring Boot Admin ⾃⼰(因为⾃⼰也会注册到 Eureka Server)。3.1、⼀个简单的 Eureka Server

关于 Eureka Server 这⾥不做详细介绍,只列⼀下配置经过: pom.xml

org.springframework.cloud

spring-cloud-starter-eureka-server

Eureka Server 启动类

@SpringBootApplication@EnableEurekaServer

public class EurekaServerApplication {

public static void main(String[] args) {

SpringApplication.run(EurekaServerApplication.class, args); }}

application.properties

spring.application.name=eureka-serverserver.port=8761

在 application.properties 同级⽬录下新建 bootstrap.properties ⽂件: bootstrap.properties

eureka.instance.hostname=localhosteureka.client.registerWithEureka=falseeureka.client.fetchRegistry=false

eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

此⽂件作⽤与 application.properties ⼏乎样,只是但是作⽤在 application context 启动时期。原话是:likeapplication.properties but for the bootstrap phase of an application context 。3.2、Server 端官⽅⽰例:

3.2.1、添加 spring-cloud-starter-eureka 依赖pom.xml

de.codecentric

spring-boot-admin-server 1.3.4

de.codecentric

spring-boot-admin-server-ui 1.3.4

org.springframework.cloud spring-cloud-starter-eureka

3.2.2、添加 @EnableDiscoveryClient 开启发现

@Configuration

@EnableAutoConfiguration@EnableDiscoveryClient@EnableAdminServer

public class SpringBootAdminApplication { public static void main(String[] args) {

SpringApplication.run(SpringBootAdminApplication.class, args); }}

3.2.3、指明去哪注册application.properties

eureka.instance.client.serviceUrl.defaultZone: http://localhost:8761/eureka/

也就是我们在 3.1 中配置的 Eureka Server 服务地址。3.2.4、官⽅未说明的

3.2.1 ~ 3.2.3 的配置,会把 Server 注册到 Eureka Server,也就是说 Spring Boot Admin 也可以管理⾃⾝,但现在的 Server配置还不全⾯(⽐如⾃⾝还缺的配置有:版本信息、 JMX 管理和 Loglevel 管理)。加上以下配置: application.properties

info.version=@project.version@

pom.xml

org.jolokia jolokia-core

logback.xml

3.3、Client 端

Client 端的配置主要是把⾃⼰注册到 Eureka Server 中就可以被 Spring Boot Admin 管理了,免去了⼿⼯配置 Spring BootAdmin 服务地址的操作(即 2.2.2 节操作)。3.3.1、依赖pom.xml

org.springframework.cloud spring-cloud-starter-eureka

org.springframework.boot

spring-boot-starter-actuator

注意要添加 spring-boot-starter-actuator 依赖,因为获取应⽤信息是通过 actuator 中的相关 endpoints 获取的。

之所以 Server 端不需要添加此依赖,是因为 spring-boot-admin-server 依赖于 spring-boot-admin-starter-client ,⽽ spring-boot-admin-starter-client 依赖于 spring-boot-starter-actuator 。3.3.2、启动类

@SpringBootApplication@EnableEurekaClient

public class ClientEurekaSampleApplication { public static void main(String[] args) {

SpringApplication.run(ClientEurekaSampleApplication.class, args); }}

添加 @EnableDiscoveryClient 或 @EnableEurekaClient 注解到启动类上,将⾃⼰注册到 Erueka Server。3.3.3、指明去哪注册bootstrap.properties

eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/

3.3.4、其他项配置application.properties

info.version=@project.version@

logback.xml

pom.xml

org.jolokia jolokia-core

四、通知

官⽅提供好⼏种通知⽅式,这⾥贴⼀下邮件通知的配置,其他 Pagerduty、Hipchat 、Slack 和 Reminder 的通知配置请参见官⽅⽂档。

使⽤ spring-boot-starter-mail 依赖配置 JavaMailSenderpom.xml

org.springframework.boot spring-boot-starter-mail

application.properties

spring.mail.host=smtp.example.com

spring.boot.admin.notify.mail.to=admin@example.com

表格:邮件配置选项

Property name

spring.boot.admin.notify.mail.enabled

DescriptionEnable mailnotifications

true

Default value

中⽂说明默认启⽤需要忽略的状态改变通知,逗号分隔接收通知的邮箱地址,逗号分隔抄送发送⼈主题

Comma-delimitedlist of status

spring.boot.admin.notify.mail.ignore-changes to be

“UNKNOWN:UP”

changesignored. Format:

“:”. Wildcardsallowed.

Comma-delimitedlist of mail“root@localhost”recipientsComma-delimitedlist of carbon-copyrecipientsMail sender

spring.boot.admin.notify.mail.to

spring.boot.admin.notify.mail.ccspring.boot.admin.notify.mail.from

Mail subject.“#{application.name} (#

spring.boot.admin.notify.mail.subjectSpEL-expressions{application.id}) is #

are supported{to.status}”

Mail body. SpEL-expressions aresupported

“#{application.name} (#{application.id})\\nstatuschanged from #{from.status} to #{to.status}\\n\\n#

{application.healthUrl}”

spring.boot.admin.notify.mail.text

内容

五、附:Spring Boot Admin Server 配置说明表格:Spring Boot Admin Server 配置选项

Property name

Description

The context-path prefixes thepath where the Admin Server'sstatics assets and API shouldbe served. Relative to theDispatcher-Servlet.

Defaultvalue

中⽂说明Admin Server 保留的静态访问和API的前缀(当你在业务应⽤中使⽤⽽不是单独使⽤时就很有必要了)

spring.boot.admin.context-path

Time interval in ms to update

Property nameDescription

spring.boot.admin.monitor.periodthe status of applications with

expired status-informations.

Default更新应⽤信息的频

中⽂说明

10.000value

率,单位毫秒

Lifetime of application statuses

被监控的应⽤信息

spring.boot.admin.monitor.status-in ms. The applications /health-10.000的过期时间,单位

lifetimeendpoint will not be queried

毫秒

until the lifetime has expired.5.1、Spring Cloud 对⾃动发现的⽀持

来⾃被发现的应⽤的状态信息是经过 ServiceInstanceConverter 转换过的,⾃动配置时,使⽤了 Spring Boot Admin ⾃带的Eureka 转换实现。你也可以实现相关接⼝并并添加到上下⽂以替换默认的。表格:注册发现配置选项

Default⽂value说

默认开启

Property nameDescription

spring.boot.admin.discovery.enabled

Enables the DiscoveryClient-support for the admin server.

true

Will be appended to the service-url of the discovered service

spring.boot.admin.discovery.converter.management-when the managment-url is

context-path

converted by the

DefaultServiceInstanceConverter.spring.boot.admin.discovery.converter.health-endpoint

Will be appended to themanagement-url of the

discovered service when the“health”health-url is converted by the

DefaultServiceInstanceConverter.This services will be ignoredwhen using discovery and notregistered as application.

spring.boot.admin.discovery.ignored-services

六、附:Spring Boot Admin Client 配置说明

Spring Boot Admin Client 注册到 Spring Boot Admin Server,Client 定期地发送 Http Post 到 admin 提供⾃⼰的应⽤信息。如果需要管理 loglevels 或 JMX-beans ,则要在依赖中添加 Jolokia ,使得 JMX-beans 也可以通过 http 访问。表格:Spring Boot Admin Client配置选项

Property name

spring.boot.admin.client.enabled

Description

Enables the Spring BootAdmin Client.

true

Default value

中⽂说明默认开启adminserver的地址列表,此设置会触发⾃动配置,必须注册

spring.boot.admin.url

List of URLs of the SpringBoot Admin server to registerat. This triggers the

AutoConfiguration. Mandatory.

Property name

spring.boot.admin.api-path

DescriptionDefault value

Http-path of registration

“api/applications”

endpoint at your admin server.

到中⽂admin说明server端点的Http-path注册到adminserver的账号密码重试注册的间隔时间应⽤启动后⾃动执⾏周期性的注册任务当应⽤关闭时,⾃动取消注册

spring.boot.admin.usernamespring.boot.admin.password

Username and password forhttp-basic authentication. If setthe registration uses http-basic-authentication whenregistering at the adminserver.

spring.boot.admin.period

Interval for repeating theregistration (in ms).

10.000

spring.boot.admin.auto-registration

If set to true the periodic taskto register the application is

true

automatically scheduled afterthe application is ready.

Switch to enable auto-deregistration at Spring Boot

spring.boot.admin.auto-deregistrationfalse

Admin server when context isclosed.

Client-health-url to registerwith. Can be overridden inGuessed based oncase the reachable URL ismanagement-url anddifferent (e.g. Docker). Must beendpoints.health.id.unique in registry.

Guessed based on

service-url, server.servlet-path, management.portand management.context-path.

Guessed based on

hostname, server.port andserver.context-path.

spring.boot.admin.client.health-url

Client-management-url toregister with. Can be

spring.boot.admin.client.management-overridden in case the

url

reachable url is different (e.g.Docker).spring.boot.admin.client.service-url

Client-service-url to registerwith. Can be overridden incase the reachable url isdifferent (e.g. Docker).Name to register with.

spring.boot.admin.client.name

${spring.application.name}注册if set, “spring-boot-时的

application” otherwise.名字

spring.boot.admin.client.prefer-ip

Use the ip-address rather then

the hostname in the guessedurls. If server.address /

management.address is set, it

false

get used. Otherwise the IPaddress returned from

InetAddress.getLocalHost()gets used.

七、问答

这部分我也啰嗦⼀下翻译出来。

我可以把 spring-boot-admin 添加到我的业务应⽤中吗?

答:可以,但不应该这么做。你可以设置 spring.boot.admin.context-path 来改变 admin server 保留的 UI 和 REST-API 的访问,取决于你的应⽤复杂性,你可能会陷⼊困境。另⼀⽅⾯,当你的应⽤挂掉后,你的监控也⼀起挂掉,那么要监控有什么⽤呢?

该怎么⾃定义 UI ?

答:修改 UI 你仅可以复制并修改 spring-boot-admin-ui,并添加你⾃⼰的模块到 classpath 中。以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

因篇幅问题不能全部显示,请点此查看更多更全内容