Spring Boot Admin 的使用詳解spring
1、前言
Spring Boot Admin 用於監控基於 Spring Boot 的應用。官方文檔在這裏(v1.3.4):《Spring Boot Admin Reference Guide》
2、在 Spring Boot 項目中配置
這種配置中,Spring Boot Admin 做爲 Server,其餘 Spring Boot 應用做爲 Client,Client 把自身的信息「註冊」到 Server,咱們就能在 Server 上看到「註冊」的 Spring Boot 應用的狀態信息了。
2.一、Server 端
新建一個項目
2.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>express
2.1.二、開啓監控
添加 @EnableAdminServer 註解開啓監控
@Configuration@EnableAutoConfiguration@EnableAdminServerpublic class SpringBootAdminApplication { public static void main(String[] args) { SpringApplication.run(SpringBootAdminApplication.class, args); }}bootstrap
這裏未指定 Server 運行的端口,默認是 8080,若是要指定,則須要在 application.properties 文件中設置:
application.properties
server.port=8080api
2.二、Client 端
2.2.一、添加依賴
pom.xml
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>1.3.4</version></dependency>瀏覽器
這裏的 spring-boot-admin-starter-client 會自動依賴 jolokia-core,jolokia是用於 JMX-bean 管理的。
2.2.二、觸發自動配置、指明 Server 註冊地址
application.properties
spring.boot.admin.url=http://localhost:8080app
上面 3.1.2 中 Server 端咱們使用默認的 8080 端口,因此這裏聲明 Server 的地址爲:http://localhost:8080
2.三、開始管理
至此,啓動 Server 端和 Client 端,在瀏覽器輸入 Server 的地址:http://localhost:8080 就能看到「註冊」進來的 Spring Boot 應用信息了。
2.四、顯示應用版本
爲了在 Spring Boot Admin 的應用管理列表顯示被管理應用的版本號,你須要設置 info.version,例如使用 maven filtering:
application.properties
info.version=@project.version@maven
這裏設置顯示的版本號爲 Maven pom.xml 中的構建版本號。
2.五、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>ide
2.六、Loglevel 管理
當前日誌級別管理僅限 Logback,經過 JMX 實現,因此須要依賴 jolokia 。同時,還須要配置 Logback 的 JMXConfigurator:
logback.xml
<configuration> <include resource="org/springframework/boot/logging/logback/base.xml"/> <jmxConfigurator/></configuration>spring-boot
這個 logback.xml 放在與 application.properties 同級的目錄就能夠了,若是不配置 Logback,那麼 Spring Boot Admin 就沒法管理應用的日誌級別。
2.七、Server 端監控本身
以上的配置,基本就能夠很好工做了。
可是有一個問題,咱們沒有監控做爲 Server 端的 Spring Boot Admin 自身。若是要監控到 Server 本身,把 Server 端也看成是 Client 同樣來配置就能夠實現了:把 2.2.一、2.2.二、2.四、2.6 的步驟在 Server 端也配置一遍。
3、在 Spring Cloud 項目的 Eureka 中配置
這裏示例的 Spring Cloud 項目是使用 Eureka 來作註冊/發現的,官方 Github 示例裏有基於 Consul 和 Zookeper 的配置。
配置好以後,Spring Boot Admin 就能夠管理全部註冊到 Eureka Server 的應用了,包括 Spring Boot Admin 本身(由於本身也會註冊到 Eureka Server)。
3.一、一個簡單的 Eureka Server
關於 Eureka Server 這裏不作詳細介紹,只列一下配置通過:
pom.xml
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId></dependency>測試
Eureka Server 啓動類
@SpringBootApplication@EnableEurekaServerpublic 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=falseeureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
此文件做用與 application.properties 幾乎樣,只是可是做用在 application context 啓動時期。原話是:like application.properties but for the bootstrap phase of an application context 。
以上配置代表,咱們的 Eureka Server 運行在 8761 端口。服務註冊地址是:http://localhost:8761/eureka/
3.二、Server 端
官方示例:spring-boot-admin-sample-eureka
3.2.一、添加 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>
3.2.二、添加 @EnableDiscoveryClient 開啓發現
@Configuration@EnableAutoConfiguration@EnableDiscoveryClient@EnableAdminServerpublic class SpringBootAdminApplication { public static void main(String[] args) { SpringApplication.run(SpringBootAdminApplication.class, args); }}
3.2.三、指明去哪註冊
application.properties
eureka.instance.client.serviceUrl.defaultZone: http://localhost:8761/eureka/
也就是咱們在 3.1 中配置的 Eureka Server 服務地址。
這個配置我測試時並不成功,改成 eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/ 才能夠,不知爲什麼。
3.2.四、官方未說明的
3.2.1 ~ 3.2.3 的配置,會把 Server 註冊到 Eureka Server,也就是說 Spring Boot Admin 也能夠管理自身,但如今的 Server 配置還不全面(好比自身還缺的配置有:版本信息、 JMX 管理和 Loglevel 管理)。加上如下配置: application.properties
info.version=@project.version@
pom.xml
<dependency> <groupId>org.jolokia</groupId> <artifactId>jolokia-core</artifactId></dependency>
logback.xml
<configuration> <include resource="org/springframework/boot/logging/logback/base.xml"/> <jmxConfigurator/></configuration>
3.三、Client 端
Client 端的配置主要是把本身註冊到 Eureka Server 中就能夠被 Spring Boot Admin 管理了,免去了手工配置 Spring Boot Admin 服務地址的操做(即 2.2.2 節操做)。
3.3.一、依賴
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>
注意要添加 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.二、啓動類
@SpringBootApplication@EnableEurekaClientpublic class ClientEurekaSampleApplication { public static void main(String[] args) { SpringApplication.run(ClientEurekaSampleApplication.class, args); }}
添加 @EnableDiscoveryClient 或 @EnableEurekaClient 註解到啓動類上,將本身註冊到 Erueka Server。
3.3.三、指明去哪註冊
bootstrap.properties
eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/
3.3.四、其餘項配置
application.properties
info.version=@project.version@
logback.xml
<configuration> <include resource="org/springframework/boot/logging/logback/base.xml"/> <jmxConfigurator/></configuration>
pom.xml
<dependency> <groupId>org.jolokia</groupId> <artifactId>jolokia-core</artifactId></dependency>
4、通知
官方提供好幾種通知方式,這裏貼一下郵件通知的配置,其餘 Pagerduty、Hipchat 、Slack 和 Reminder 的通知配置請參見官方文檔。
使用 spring-boot-starter-mail 依賴配置 JavaMailSender
pom.xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId></dependency>
application.properties
spring.mail.host=smtp.example.comspring.boot.admin.notify.mail.to=admin@example.com
表格:郵件配置選項
[td]
Property name
Description
Default value
中文說明
spring.boot.admin.notify.mail.enabled Enable mail notifications true 默認啓用
spring.boot.admin.notify.mail.ignore-changes Comma-delimited list of status changes to be ignored. Format: 「:」. Wildcards allowed. 「UNKNOWN:UP」 須要忽略的狀態改變通知,逗號分隔
spring.boot.admin.notify.mail.to Comma-delimited list of mail recipients 「root@localhost」 接收通知的郵箱地址,逗號分隔
spring.boot.admin.notify.mail.cc Comma-delimited list of carbon-copy recipients 抄送
spring.boot.admin.notify.mail.from Mail sender 發送人
spring.boot.admin.notify.mail.subject Mail subject. SpEL-expressions are supported 「#{application.name} (#{application.id}) is #{to.status}」 主題
spring.boot.admin.notify.mail.text Mail body. SpEL-expressions are supported 「#{application.name} (#{application.id})nstatus changed from #{from.status} to #{to.status}nn#{application.healthUrl}」 內容
5、附:Spring Boot Admin Server 配置說明
表格:Spring Boot Admin Server 配置選項
[td]
Property name
Description
Default value
中文說明
spring.boot.admin.context-path The 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.period Time interval in ms to update the status of applications with expired status-informations. 10.000 更新應用信息的頻率,單位毫秒
spring.boot.admin.monitor.status-lifetime Lifetime of application statuses in ms. The applications /health-endpoint will not be queried until the lifetime has expired. 10.000 被監控的應用信息的過時時間,單位毫秒
5.一、Spring Cloud 對自動發現的支持
來自被發現的應用的狀態信息是通過 ServiceInstanceConverter 轉換過的,自動配置時,使用了 Spring Boot Admin 自帶的 Eureka 轉換實現。你也能夠實現相關接口並並添加到上下文以替換默認的。
表格:註冊發現配置選項
[td]
Property name
Description
Default value
中文說明
spring.boot.admin.discovery.enabled Enables the DiscoveryClient-support for the admin server. true 默認開啓
spring.boot.admin.discovery.converter.management-context-path Will 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-endpoint Will 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-services This services will be ignored when using discovery and not registered as application.
6、附: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配置選項
[td]
Property nameDescriptionDefault value中文說明spring.boot.admin.client.enabled Enables the Spring Boot Admin Client. true 默認開啓spring.boot.admin.url List of URLs of the Spring Boot Admin server to register at. This triggers the AutoConfiguration. Mandatory. admin server 的地址列表,此設置會觸發自動配置,必須spring.boot.admin.api-path Http-path of registration endpoint at your admin server. 「api/applications」 註冊到 admin server 端點的 Http-pathspring.boot.admin.username spring.boot.admin.password Username 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.period Interval for repeating the registration (in ms). 10.000 重試註冊的間隔時間spring.boot.admin.auto-registration If set to true the periodic task to register the application is automatically scheduled after the application is ready. true 應用啓動後自動執行週期性的註冊任務spring.boot.admin.auto-deregistration Switch to enable auto-deregistration at Spring Boot Admin server when context is closed. false 當應用關閉時,自動取消註冊spring.boot.admin.client.health-url Client-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-url Client-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-url Client-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.name Name to register with. ${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 guessed urls. If server.address / management.address is set, it get used. Otherwise the IP address returned from InetAddress.getLocalHost() gets used. false