Spring Boot Admin
看到這幾個頁面是不是覺得還是蠻炫酷的枝恋,畢竟是Spring自家的產(chǎn)品,做的還是可以的。
我們就來簡易的搭一下這個監(jiān)控中中心
1. 新建Springboot項目
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--Spring Security-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2.啟動類注解配置
@SpringBootApplication
@EnableAdminServer
public class MonitorApplication {
public static void main(String[] args) {
SpringApplication.run(MonitorApplication.class, args);
}
}
@EnableAdminServer
:標明組件名稱
用過這么多Spring的組件之后义锥,我們應該是對這種類似的注解已經(jīng)見過很多次了。
3.SpringSecurity 的配置類
/**
* @Author:LiuPu
* @Date:2018/9/26 14:48
* @Description:
* @Version 1.011
*/
@Configuration
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter{
private final String adminContextPath;
public SecuritySecureConfig(AdminServerProperties adminServerProperties) {
this.adminContextPath = adminServerProperties.getContextPath();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
http.authorizeRequests()
.antMatchers(adminContextPath + "/assets/**").permitAll()
.antMatchers(adminContextPath + "/login").permitAll()
.anyRequest().authenticated()
.and()
.formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
.logout().logoutUrl(adminContextPath + "/logout").and()
.httpBasic().and()
.csrf().disable();
// @formatter:on
}
}
WebSecurityConfigurerAdapter
:優(yōu)先級高于ResourceServerConfigurer,用于保護oauth相關的endpoints,同時主要作用于用戶的登錄(form login碉熄,Basic auth )WebSecurityConfigurerAdapter是默認情況下Spring security的http配置;ResourceServerConfigurerAdapter是默認情況下spring security oauth 的http配置肋拔。
WebSecurityConfigurerAdapter部分源碼:
public abstract class WebSecurityConfigurerAdapter implements WebSecurityConfigurer<WebSecurity> {
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
......
}
protected void configure(WebSecurity web) throws Exception {
......
}
protected void configure(HttpSecurity http) throws Exception {
........
}
}
4.配置文件
server.port=18080
spring.application.name=monitor
eureka.client.service-url.defaultZone=http://localhost:10000/eureka/
management.endpoints.web.exposure.include=refresh,health,info,env,loggers,metrics,trace,dump
management.endpoint.health.show-details=always
spring.security.user.name=aboyliupu
spring.security.user.password=lp1234
eureka.instance.metadata-map.user.name=aboyliupu
eureka.instance.metadata-map.user.password=lp1234
這里有一個細節(jié)需要說明一下:
SpringBoot 2.0 默認是關閉了自帶的一些接口锈津,比如說實例的健康狀態(tài),心跳之類的
management.endpoints.web.exposure.include=refresh,health,info,env,loggers,metrics,trace,dump
這里需要開放一些端口
eureka.client.service-url.defaultZone=http://localhost:10000/eureka/
:把實例注冊到注冊中心
spring.security.user.name=aboyliupu
spring.security.user.password=lp1234
eureka.instance.metadata-map.user.name=aboyliupu
eureka.instance.metadata-map.user.password=lp1234
:
登錄的賬號和密碼及其配置
5.關于SpringSercurity的配置
在整個實例種凉蜂,SpringSercurity這么龐大的框架其實只是用到了其作用的九牛一毛----登錄攔截.
如果細說琼梆,這個登錄界面有沒有用呢?俗話說的好窿吩,防君子不防小人茎杂,這個就要看字自己斟酌。
6.總結
我們搭這樣一個監(jiān)控中心的意義是什么纫雁?
比如說煌往,你們公司的項目使用的是SOA框架,在入口上的軟硬件上做了Nginx+服務器集群先较,同時在軟件上也做了集群携冤,例如注冊中心集群.....
盡管我們擁有這么完美的熔斷機制和預防機制,但是實例出了問題我們還是需要去解決問題闲勺。這個時候監(jiān)控中心監(jiān)測實例健康和心跳的作用就起了大作用了曾棕。我們就能一眼看出是哪些實例掛掉了。