Spring Boot Admin 的使用

来源:互联网 发布:干扰摄像头软件下载 编辑:程序博客网 时间:2024/04/29 17:19

一、前言

spring Boot Admin 用于监控基于 Spring Boot 的应用。官方文档在这里(v1.3.4):《Spring Boot Admin Reference Guide》

实践的过程中,感觉这个 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

<dependency>    <groupId>de.codecentric</groupId>    <artifactId>spring-boot-admin-server</artifactId>    <version>1.3.4</version></dependency><dependency>    <groupId>de.codecentric</groupId>    <artifactId>spring-boot-admin-server-ui</artifactId>    <version>1.3.4</version></dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2.1.2、开启监控

添加 @EnableAdminServer 注解开启监控

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

这里未指定 Server 运行的端口,默认是 8080,如果要指定,则需要在 application.properties 文件中设置:
application.properties

server.port=8080
  • 1
  • 1

2.2、Client 端

2.2.1、添加依赖

pom.xml

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

这里的 spring-boot-admin-starter-client 会自动依赖 jolokia-core,jolokia是用于 JMX-bean 管理的。

2.2.2、触发自动配置、指明 Server 注册地址

application.properties

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

上面 3.1.2 中 Server 端我们使用默认的 8080 端口,所以这里声明 Server 的地址为:http://localhost:8080

2.3、开始管理

至此,启动 Server 端和 Client 端,在浏览器输入 Server 的地址:http://localhost:8080 就能看到“注册”进来的 Spring Boot 应用信息了。

2.4、显示应用版本

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

info.version=@project.version@
  • 1
  • 1

这里设置显示的版本号为 Maven pom.xml 中的构建版本号。

2.5、JMX-bean管理

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

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

2.6、Loglevel 管理

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

<configuration>    <include resource="org/springframework/boot/logging/logback/base.xml"/>    <jmxConfigurator/></configuration>
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

这个 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

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

Eureka Server 启动类

@SpringBootApplication@EnableEurekaServerpublic class EurekaServerApplication {    public static void main(String[] args) {        SpringApplication.run(EurekaServerApplication.class, args);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

application.properties

spring.application.name=eureka-serverserver.port=8761
  • 1
  • 2
  • 1
  • 2

在 application.properties 同级目录下新建 bootstrap.properties 文件:
bootstrap.properties

eureka.instance.hostname=localhosteureka.client.registerWithEureka=falseeureka.client.fetchRegistry=falseeureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

此文件作用与 application.properties 几乎样,只是但是作用在 application context 启动时期。原话是:like application.properties but for the bootstrap phase of an application context

以上配置表明,我们的 Eureka Server 运行在 8761 端口。服务注册地址是:http://localhost:8761/eureka/

3.2、Server 端

官方示例:spring-boot-admin-sample-eureka

3.2.1、添加 spring-cloud-starter-eureka 依赖

pom.xml

<dependency>    <groupId>de.codecentric</groupId>    <artifactId>spring-boot-admin-server</artifactId>    <version>1.3.4</version></dependency><dependency>    <groupId>de.codecentric</groupId>    <artifactId>spring-boot-admin-server-ui</artifactId>    <version>1.3.4</version></dependency><dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-eureka</artifactId></dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3.2.2、添加 @EnableDiscoveryClient 开启发现

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

3.2.3、指明去哪注册

application.properties

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

也就是我们在 3.1 中配置的 Eureka Server 服务地址。

这个配置我测试时并不成功,改为 eureka.client.serviceUrl.defaultZone:http://localhost:8761/eureka/ 才可以,不知为何。

3.2.4、官方未说明的

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

info.version=@project.version@
  • 1
  • 1

pom.xml

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

logback.xml

<configuration>    <include resource="org/springframework/boot/logging/logback/base.xml"/>    <jmxConfigurator/></configuration>
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

3.3、Client 端

Client 端的配置主要是把自己注册到 Eureka Server 中就可以被 Spring Boot Admin 管理了,免去了手工配置 Spring Boot Admin 服务地址的操作(即 2.2.2 节操作)。

3.3.1、依赖

pom.xml

<dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-actuator</artifactId></dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

注意要添加 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@EnableEurekaClientpublic class ClientEurekaSampleApplication {    public static void main(String[] args) {        SpringApplication.run(ClientEurekaSampleApplication.class, args);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

添加 @EnableDiscoveryClient@EnableEurekaClient 注解到启动类上,将自己注册到 Erueka Server。

3.3.3、指明去哪注册

bootstrap.properties

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

3.3.4、其他项配置

application.properties

info.version=@project.version@
  • 1
  • 1

logback.xml

<configuration>    <include resource="org/springframework/boot/logging/logback/base.xml"/>    <jmxConfigurator/></configuration>
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

pom.xml

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

四、通知

官方提供好几种通知方式,这里贴一下邮件通知的配置,其他 PagerdutyHipchatSlackReminder 的通知配置请参见官方文档。

使用 spring-boot-starter-mail 依赖配置 JavaMailSender

pom.xml

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

application.properties

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

表格:邮件配置选项

Property nameDescriptionDefault value中文说明spring.boot.admin.notify.mail.enabledEnable mail notificationstrue默认启用spring.boot.admin.notify.mail.ignore-changesComma-delimited list of status changes to be ignored. Format: “:”. Wildcards allowed.“UNKNOWN:UP”需要忽略的状态改变通知,逗号分隔spring.boot.admin.notify.mail.toComma-delimited list of mail recipients“root@localhost”接收通知的邮箱地址,逗号分隔spring.boot.admin.notify.mail.ccComma-delimited list of carbon-copy recipients 抄送spring.boot.admin.notify.mail.fromMail sender 发送人spring.boot.admin.notify.mail.subjectMail subject. SpEL-expressions are supported“#{application.name} (#{application.id}) is #{to.status}”主题spring.boot.admin.notify.mail.textMail body. SpEL-expressions are supported“#{application.name} (#{application.id})\nstatus changed from #{from.status} to #{to.status}\n\n#{application.healthUrl}”内容

五、附:Spring Boot Admin Server 配置说明

表格:Spring Boot Admin Server 配置选项

Property nameDescriptionDefault value中文说明spring.boot.admin.context-pathThe context-path prefixes the path where the Admin Server’s statics assets and API should be served. Relative to the Dispatcher-Servlet. Admin Server 保留的静态访问和API的前缀(当你在业务应用中使用而不是单独使用时就很有必要了)spring.boot.admin.monitor.periodTime interval in ms to update the status of applications with expired status-informations.10.000更新应用信息的频率,单位毫秒spring.boot.admin.monitor.status-lifetimeLifetime of application statuses in ms. The applications /health-endpoint will not be queried until the lifetime has expired.10.000被监控的应用信息的过期时间,单位毫秒

5.1、Spring Cloud 对自动发现的支持

来自被发现的应用的状态信息是经过 ServiceInstanceConverter 转换过的,自动配置时,使用了 Spring Boot Admin 自带的 Eureka 转换实现。你也可以实现相关接口并并添加到上下文以替换默认的。

表格:注册发现配置选项

Property nameDescriptionDefault value中文说明spring.boot.admin.discovery.enabledEnables the DiscoveryClient-support for the admin server.true默认开启spring.boot.admin.discovery.converter.management-context-pathWill be appended to the service-url of the discovered service when the managment-url is converted by the DefaultServiceInstanceConverter.  spring.boot.admin.discovery.converter.health-endpointWill be appended to the management-url of the discovered service when the health-url is converted by the DefaultServiceInstanceConverter.“health” spring.boot.admin.discovery.ignored-servicesThis services will be ignored when using discovery and not registered as application.  

六、附: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 nameDescriptionDefault value中文说明spring.boot.admin.client.enabledEnables the Spring Boot Admin Client.true默认开启spring.boot.admin.urlList of URLs of the Spring Boot Admin server to register at. This triggers the AutoConfiguration.Mandatory. admin server 的地址列表,此设置会触发自动配置,必须spring.boot.admin.api-pathHttp-path of registration endpoint at your admin server.“api/applications”注册到 admin server 端点的 Http-pathspring.boot.admin.username spring.boot.admin.passwordUsername and password for http-basic authentication. If set the registration uses http-basic-authentication when registering at the admin server. 注册到 admin server 的账号密码spring.boot.admin.periodInterval for repeating the registration (in ms).10.000重试注册的间隔时间spring.boot.admin.auto-registrationIf set to true the periodic task to register the application is automatically scheduled after the application is ready.true应用启动后自动执行周期性的注册任务spring.boot.admin.auto-deregistrationSwitch to enable auto-deregistration at Spring Boot Admin server when context is closed.false当应用关闭时,自动取消注册spring.boot.admin.client.health-urlClient-health-url to register with. Can be overridden in case the reachable URL is different (e.g. Docker). Must be unique in registry.Guessed based on management-url and endpoints.health.id. spring.boot.admin.client.management-urlClient-management-url to register with. Can be overridden in case the reachable url is different (e.g. Docker).Guessed based on service-url, server.servlet-path, management.port and management.context-path. spring.boot.admin.client.service-urlClient-service-url to register with. Can be overridden in case the reachable url is different (e.g. Docker).Guessed based on hostname, server.port and server.context-path. spring.boot.admin.client.nameName to register with.${spring.application.name} if set, “spring-boot-application” otherwise.注册时的名字spring.boot.admin.client.prefer-ipUse the ip-address rather then the hostname in the guessed urls. If server.address / management.address is set, it get used. Otherwise the IP address returned from InetAddress.getLocalHost() gets used.false 

七、问答

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

  • 我可以把 spring-boot-admin 添加到我的业务应用中吗?
    答:可以,但不应该这么做。你可以设置 spring.boot.admin.context-path 来改变 admin server 保留的 UI 和 REST-API 的访问,取决于你的应用复杂性,你可能会陷入困境。另一方面,当你的应用挂掉后,你的监控也一起挂掉,那么要监控有什么用呢?

  • 该怎么自定义 UI ?
    答:修改 UI 你仅可以复制并修改 spring-boot-admin-ui,并添加你自己的模块到 classpath 中。


原文地址:http://blog.csdn.net/kinginblue/article/details/52132113

0 0
原创粉丝点击