Spring Boot Admin用于管理和監(jiān)控一個或者多個Spring Boot程序晌畅。分為Server端和Client端豹悬,Client端可以通過Http向Server端注冊蛾魄,也可以結(jié)合Spring Cloud的服務(wù)注冊組件Eureka進(jìn)行注冊蜡塌,它提供了UI界面仑性,方便用于管理和監(jiān)控军掂。監(jiān)控的內(nèi)容包括Spring Boot的監(jiān)控組件Actuator的各個Http節(jié)點(diǎn)蠕搜。
本章依然使用前面講解其他組件所建的工程怎茫,github地址。
監(jiān)控Spring Cloud微服務(wù)
構(gòu)建Admin Server
在之前的演示項(xiàng)目中創(chuàng)建一個Module工程,取名admin-server轨蛤。
- 引入相關(guān)依賴蜜宪,依賴和說明如下。
<!--Admin Server-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server</artifactId>
<version>1.5.1</version>
</dependency>
<!--Admin Server UI -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--eureka client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!--actuator的起步依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--在管理界面需要與JMX-Beans進(jìn)行交互祥山,需要引入jolokia的依賴 -->
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-core</artifactId>
</dependency>
- 在配置文件中做相關(guān)配置圃验,配置和說明如下。
server:
port: 5000
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/ # eureka注冊中心地址
spring:
application:
name: admin-server
# spring boot默認(rèn)開啟env缝呕、metrics澳窑、dump、jolokia供常、info等節(jié)點(diǎn)照捡,這里開啟其它監(jiān)控節(jié)點(diǎn)
boot:
admin:
routes:
endpoints: env,metrics,dump,jolokia,info,configprops,trace,logfile,refresh,flyway,liquibase,heapdump,loggers,auditevents,hystrix.stream,activiti
turbine:
clusters: default
location: turbine-server
logging:
file: "/logs/boot-admin-sample.log" # 日志輸出路徑
management:
security:
enabled: false # 在spring boot 1.5之后Actuator的所有API接口開啟了安全認(rèn)證,為了講解方便话侧,暫時(shí)先關(guān)閉栗精。
- 配置日志管理Logback,在Resources目錄下建一個logbook-spring.xml文件瞻鹏,代碼如下
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<jmxConfigurator/>
</configuration>
- 在程序啟動類加上@EnableAdminServer注解開啟Admin Server的功能悲立,加上@EnableEurekaClient注解開啟Eureka Client的功能。
@SpringBootApplication
@EnableEurekaClient
@EnableAdminServer
public class AdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(AdminServerApplication.class, args);
}
}
根據(jù)以上步驟一個Spring Boot Admin Server的雛形就搭建完成了新博。
搭建Admin Client
這里在之前的Mudule工程eureka-client基礎(chǔ)上做改造薪夕。
- 添加Actuator的起步依賴,以及Jolokia的依賴赫悄。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-core</artifactId>
</dependency>
- 在配置文件中添加日志的輸出路徑配置和關(guān)閉Actuator模塊的安全驗(yàn)證原献。
logging:
file: "logs/eureka-client.log"
management:
security:
enabled: false
依此啟動eureka-server,admin-server埂淮,eureka-client姑隅。在本地localhost上訪問admin-server的端口,顯示的admin-server的界面如下倔撞。
- APPLICATIONS選項(xiàng)展示了向eureka-server注冊的所有客戶端實(shí)例讲仰。
- JOURNAL選項(xiàng)為服務(wù)注冊、下載痪蝇、剔除的時(shí)間線鄙陡。
- ABOUT選項(xiàng)是關(guān)于Spring Boot Admin的介紹。
- APPLICATIONS面板的客戶端實(shí)例右側(cè)有個Detail按鈕躏啰,點(diǎn)擊可以進(jìn)入客戶端實(shí)例的詳細(xì)界面趁矾。在詳細(xì)界面可以查看客戶端的實(shí)例信息、日志信息给僵、指標(biāo)信息毫捣、環(huán)境信息、日志級別的管理和JMX等。
集成Turbine
在介紹熔斷器Hystrix
章節(jié)中提到培漏,Turbine用于聚合多個Hystrix Dashboard溪厘,將多個Hystrix Dashboard組件的數(shù)據(jù)放在一個頁面上展示,進(jìn)行集中監(jiān)控牌柄。在介紹了微服務(wù)監(jiān)控Spring Boot Admin后畸悬,有人會問是不是可以把Hystrix的監(jiān)控和服務(wù)的監(jiān)控放在一起呢?答案是可以的珊佣。Spring Boot Admin Server中可以集成Turbine組件蹋宦,這樣可以讓Turbine中展示的內(nèi)容整合到Spring Boot Admin Server中,和服務(wù)實(shí)例一起監(jiān)控咒锻,方便統(tǒng)一查看和管理冷冗。
改造服務(wù)實(shí)例(Eureka Client)
在介紹熔斷器Hystrix時(shí)我們在eureka-ribbon-client和eureka-feign-client中已經(jīng)集成了Hystrix和Hystrix DashBoard的依賴和相關(guān)操作,這里就用這兩個服務(wù)實(shí)例來做改造惑艇。
- 在兩個服務(wù)實(shí)例中添加Actuator的起步依賴蒿辙。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
這里服務(wù)實(shí)例的改造就完成了,重點(diǎn)是Hystrix滨巴、Hystrix DashBoard思灌、Actuator的依賴。
構(gòu)建Turbine工程
在項(xiàng)目中新建一個Module工程恭取,取名為turbine-server泰偿。這個工程要提供Turbine的功能,聚合eureka-ribbon-client和eureka-feign-client的Hystrix DashBoard組件蜈垮。
- 在pom文件中加eureka耗跛、actuator、turbine和jolokia的起步依賴攒发。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-turbine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-turbine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
- 在配置文件中配置turbine和eureka的相關(guān)配置调塌。
server:
port: 8770
spring:
application:
name: turbine-server
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/ # eureka注冊中心地址
turbine:
app-config: eureka-ribbon-client,eureka-feign-client # 聚合改造的兩個服務(wù)實(shí)例的Hystrix DashBoard組件
cluster-name-expression: new String("default")
aggregator:
clusterConfig: default
- 啟動類中添加@EnableTurbine注解開啟Turbine功能,@EnableEurekaClient開啟eureka的功能晨继。
@SpringBootApplication
@EnableEurekaClient
@EnableTurbine
public class TurbineServerApplication {
public static void main(String[] args) {
SpringApplication.run(TurbineServerApplication.class, args);
}
}
在Admin Server中集成Turbine
在上一步已經(jīng)已經(jīng)實(shí)現(xiàn)了turbine-server來聚合Hystrix DashBoard的操作烟阐。這一步在admin-service中集成Turbine,并做與turbine-server的關(guān)聯(lián)配置紊扬。
- 在admin-server添加Turbine和Hystrix的相關(guān)依賴如下。
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui-turbine</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui-hystrix</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-turbine</artifactId>
</dependency>
- 在配置文件中配置turbine唉擂。
spring:
application:
name: admin-server
boot:
admin:
routes:
endpoints: env,metrics,dump,jolokia,info,configprops,trace,logfile,refresh,flyway,liquibase,heapdump,loggers,auditevents,hystrix.stream,activiti
turbine:
clusters: default
location: turbine-server # 配置turbine的服務(wù)名
- 在程序啟動類加上@EnableTurbine注解開啟Turbine功能,@EnableHystrix
開啟Hystrix功能餐屎,@EnableHystrixDashboard開啟Hystrix Dashboard的功能。
@SpringBootApplication
@EnableEurekaClient
@EnableAdminServer
@EnableHystrix
@EnableHystrixDashboard
@EnableTurbine
public class AdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(AdminServerApplication.class, args);
}
}
測試
依此啟動eureka-server玩祟、eureka-ribbon-client腹缩、eureka-feign-client、turbine-server、admin-server工程藏鹊。訪問本地admin-server的啟動端口润讥,在右上角會多一個“TURBINE”的選項(xiàng)按鈕。
訪問eureka-feign-client盘寡,eureka-ribbon-client中的接口楚殿。點(diǎn)擊TURBINE按鈕。出現(xiàn)以下Hystrix的監(jiān)控表明成功集成了turbine竿痰。
Spring Boot Admin添加安全登錄界面
Spring Boot Admin Server的主頁界面包含了太多的服務(wù)信息脆粥,如果我們不希望通過網(wǎng)址直接訪問Spring Boot Admin Server的主頁界面,此時(shí)可以添加安全登錄功能影涉。Spring Boot Admin提供了安全登錄界面的組件变隔,并且和Spring Boot Security相結(jié)合。
- 在admin-server中添加登錄界面組件的依賴和Spring Boot Security的起步依賴蟹倾。
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui-login</artifactId>
<version>1.5.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
- 在配置文件中創(chuàng)建一個security的user用戶匣缘,它的用戶名為admin,密碼為123456鲜棠。通過eureka.instance.metadate-map配置帶上改security的user用戶信息肌厨,這是因?yàn)樵诩恿薙pring Boot Security的起步依賴后,該項(xiàng)目的所有資源(包括靜態(tài)的HTML岔留、CSS夏哭、API接口等)都是受保護(hù)的,需要加上該管理員信息進(jìn)行安全驗(yàn)證才能訪問献联。
server:
port: 5000
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
metadata-map:
user.name: admin
user.password: 123456
spring:
application:
name: admin-server
boot:
admin:
routes:
endpoints: env,metrics,dump,jolokia,info,configprops,trace,logfile,refresh,flyway,liquibase,heapdump,loggers,auditevents,hystrix.stream,activiti
turbine:
clusters: default
location: turbine-server
logging:
file: "/logs/boot-admin-sample.log"
management:
security:
enabled: false
security:
user:
name: admin
password: 123456
- 寫SecurityConfig的配置類竖配,來配置登錄信息。
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.formLogin().loginPage("/login.html")
.loginProcessingUrl("/login").permitAll()
.and()
.logout().logoutUrl("/logout")
.and()
.csrf().disable()
.authorizeRequests()
.antMatchers("login.html","/**/**.css","/img/**","/third-party/**")
.permitAll()
.and()
.authorizeRequests().antMatchers("/**").authenticated()
.and()
.httpBasic();
}
}
由上所示配置了登錄界面為“/login.html”,登出界面為“/logout”里逆。這些界面以及靜態(tài)資源都在引入的JAR中进胯。給這些資源加上permitAll()方法表示不需要權(quán)限認(rèn)證。除此之外的資源加上.authenticated()方法原押,表示需要權(quán)限認(rèn)證胁镐。最后需要開啟Http的基本認(rèn)證,即.httpBasic()方法诸衔。
-
測試
重啟admin-server工程盯漂。此時(shí)訪問主界面會提示輸入用戶名和密碼,輸出正確后才能查看服務(wù)的監(jiān)控信息笨农。
總結(jié)
在這一章學(xué)習(xí)了微服務(wù)監(jiān)控的組件 Spring Boot Admin就缆。如何搭建一個Admin Server以及集成Turbine和設(shè)置安全登錄認(rèn)證。此時(shí)微服務(wù)相關(guān)的組件已經(jīng)全部介紹完畢谒亦。在之后的學(xué)習(xí)中竭宰,一起學(xué)習(xí)這些組件在微服務(wù)實(shí)際開發(fā)中的應(yīng)用和遇到的問題空郊。