http://blog.csdn.net/kinginblue/article/details/52132113java
*******************************************git
spring Boot Admin 用於監控基於 Spring Boot 的應用。官方文檔在這裏(v1.3.4):《Spring Boot Admin Reference Guide》github
實踐的過程當中,感受這個 User Guide 結構上仍是說的不太明白。因此我就大概寫一遍個人實踐過程與理解。spring
閱讀此文前提條件是:express
這種配置中,Spring Boot Admin 做爲 Server,其餘 Spring Boot 應用做爲 Client,Client 把自身的信息「註冊」到 Server,咱們就能在 Server 上看到「註冊」的 Spring Boot 應用的狀態信息了。bootstrap
新建一個項目api
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>
添加 @EnableAdminServer
註解開啓監控app
@Configuration @EnableAutoConfiguration @EnableAdminServer public class SpringBootAdminApplication { public static void main(String[] args) { SpringApplication.run(SpringBootAdminApplication.class, args); } }
這裏未指定 Server 運行的端口,默認是 8080,若是要指定,則須要在 application.properties 文件中設置:
application.propertiesmaven
server.port=8080
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 管理的。
application.properties
spring.boot.admin.url=http://localhost:8080
上面 3.1.2 中 Server 端咱們使用默認的 8080 端口,因此這裏聲明 Server 的地址爲:http://localhost:8080
至此,啓動 Server 端和 Client 端,在瀏覽器輸入 Server 的地址:http://localhost:8080 就能看到「註冊」進來的 Spring Boot 應用信息了。
爲了在 Spring Boot Admin 的應用管理列表顯示被管理應用的版本號,你須要設置 info.version
,例如使用 maven filtering:
application.properties
info.version=@project.version@
這裏設置顯示的版本號爲 Maven pom.xml 中的構建版本號。
JMX-bean 管理須要使用第三方的 jolokia ,由於 spring-boot-admin-starter-client
會自動依賴 jolokia-core
,因此這裏不須要顯示依賴了,第三節的基於 Eureka 註冊發現的配置中,就須要顯示地依賴:
pom.xml
<dependency> <groupId>org.jolokia</groupId> <artifactId>jolokia-core</artifactId> </dependency>
當前日誌級別管理僅限 Logback,經過 JMX 實現,因此須要依賴 jolokia 。同時,還須要配置 Logback 的 JMXConfigurator
:
logback.xml
<configuration> <include resource="org/springframework/boot/logging/logback/base.xml"/> <jmxConfigurator/> </configuration>
這個 logback.xml 放在與 application.properties 同級的目錄就能夠了,若是不配置 Logback,那麼 Spring Boot Admin 就沒法管理應用的日誌級別。
以上的配置,基本就能夠很好工做了。
可是有一個問題,咱們沒有監控做爲 Server 端的 Spring Boot Admin 自身。若是要監控到 Server 本身,把 Server 端也看成是 Client 同樣來配置就能夠實現了:把 2.2.一、2.2.二、2.四、2.6 的步驟在 Server 端也配置一遍。
這裏示例的 Spring Cloud 項目是使用 Eureka 來作註冊/發現的,官方 Github 示例裏有基於 Consul 和 Zookeper 的配置。
配置好以後,Spring Boot Admin 就能夠管理全部註冊到 Eureka Server 的應用了,包括 Spring Boot Admin 本身(由於本身也會註冊到 Eureka Server)。
關於 Eureka Server 這裏不作詳細介紹,只列一下配置通過:
pom.xml
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency>
Eureka Server 啓動類
@SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
application.properties
spring.application.name=eureka-server server.port=8761
在 application.properties 同級目錄下新建 bootstrap.properties
文件:
bootstrap.properties
eureka.instance.hostname=localhost eureka.client.registerWithEureka=false eureka.client.fetchRegistry=false eureka.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/
官方示例:spring-boot-admin-sample-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>
@Configuration @EnableAutoConfiguration @EnableDiscoveryClient @EnableAdminServer public class SpringBootAdminApplication { public static void main(String[] args) { SpringApplication.run(SpringBootAdminApplication.class, args); } }
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.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>
Client 端的配置主要是把本身註冊到 Eureka Server 中就能夠被 Spring Boot Admin 管理了,免去了手工配置 Spring Boot Admin 服務地址的操做(即 2.2.2 節操做)。
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
。
@SpringBootApplication @EnableEurekaClient public class ClientEurekaSampleApplication { public static void main(String[] args) { SpringApplication.run(ClientEurekaSampleApplication.class, args); } }
添加 @EnableDiscoveryClient
或 @EnableEurekaClient
註解到啓動類上,將本身註冊到 Erueka Server。
bootstrap.properties
eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/
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>
官方提供好幾種通知方式,這裏貼一下郵件通知的配置,其餘 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.com spring.boot.admin.notify.mail.to=admin@example.com
表格:郵件配置選項
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}\n\n#{application.healthUrl}」 | 內容 |
表格:Spring Boot Admin Server 配置選項
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 | 被監控的應用信息的過時時間,單位毫秒 |
來自被發現的應用的狀態信息是通過 ServiceInstanceConverter
轉換過的,自動配置時,使用了 Spring Boot Admin 自帶的 Eureka 轉換實現。你也能夠實現相關接口並並添加到上下文以替換默認的。
表格:註冊發現配置選項
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. |
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 | Description | Default 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-path |
spring.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 |
這部分我也囉嗦一下翻譯出來。
我能夠把 spring-boot-admin 添加到個人業務應用中嗎?
答:能夠,但不該該這麼作。你能夠設置 spring.boot.admin.context-path
來改變 admin server 保留的 UI 和 REST-API 的訪問,取決於你的應用複雜性,你可能會陷入困境。另外一方面,當你的應用掛掉後,你的監控也一塊兒掛掉,那麼要監控有什麼用呢?
該怎麼自定義 UI ?
答:修改 UI 你僅能夠複製並修改 spring-boot-admin-ui
,並添加你本身的模塊到 classpath 中。