一、简介
Spring Boot Adamin 可以将Actuator中的信息进行界面化的展示,也可以监控所有的Spring Boot应用的健康状况,提供实时报警功能,主要的功能点有:
- 显示应用程序的监控状态
- 应用程序上下线的监控
- 查看JVM 线程信息
- 可视化的查看日志以及下载日志文件
- 动态切换日志级别
- Http请求信息跟踪
二、简单使用
1.导入依赖
创建一个spring-boot应用加入下面的依赖
<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>
<version>2.2.3</version>
</dependency>
2.加入配置
在配置文件中加入如下配置
spring.application.name=spring-boot-admin
server.port=9091
在启动中加入注解 @EnableAdminServer
启动应用访问localhost:9091就会看到下面的页面
三、和Eureka的整合
1.导入依赖
在 Spring Boot Admin中添加如下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
2.加入配置
在配置文件中添加下面的配置
eureka.client.serviceUrl.defaultZone=http://xiaoming:123456@localhost:8761/eureka/
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
eureka.instance.status-page-url=http://${spring.cloud.client.ip-address}:${server.port}
这样启动应用后会自动监控已经注册到Eureka上所有的应用,当然他也会把自己注册到Eureka,页面如下
3.监控信息的查看
点击任意一个应用可以看到下面的监控信息
4.详细监控信息的配置
如果想看更加详细的监控信息加入下面的依赖和配置
<!-- 要在pom文件中加入的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 要在配置文件中加入的配置-->
management.endpoints.web.exposure.include=*
再次启动应用就会看到下面的界面
5.自定义报警
当微服务中应该过多的时候我们可以自定义报警,在spring-boot-admin中实现下面的代码:
import de.codecentric.boot.admin.server.domain.entities.Instance;
import de.codecentric.boot.admin.server.domain.entities.InstanceRepository;
import de.codecentric.boot.admin.server.domain.events.InstanceEvent;
import de.codecentric.boot.admin.server.notify.AbstractStatusChangeNotifier;
import reactor.core.publisher.Mono;
public class TestWarn extends AbstractStatusChangeNotifier {
public TestWarn(InstanceRepository repository) {
super(repository);
}
@Override
protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
String serviceName = instance.getRegistration().getName();
String serviceUrl = instance.getRegistration().getServiceUrl();
String status = instance.getStatusInfo().getStatus();
System.err.println("报警开始===================");
return Mono.fromRunnable(()->{
//这里写要进行的报警操作
System.err.println("serviceName: "+serviceName);
System.err.println("serviceUrl: "+serviceUrl);
System.err.println("status: "+status);
System.err.println("报警结束===================");
});
}
}
import de.codecentric.boot.admin.server.domain.entities.InstanceRepository;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import de.codecentric.boot.admin.server.config.AdminServerNotifierAutoConfiguration.NotifierTriggerConfiguration;
import de.codecentric.boot.admin.server.config.AdminServerNotifierAutoConfiguration.CompositeNotifierConfiguration;
@Component
@Configuration
@AutoConfigureBefore({NotifierTriggerConfiguration.class, CompositeNotifierConfiguration.class})
public class DingTalkNotifierConfiguration {
@Bean
public TestWarn dingTalkNotifier(InstanceRepository repository) {
return new TestWarn(repository);
}
}
这样当服务上线或者下线的时候就会发出报警。
6.对Sring Boot Admin进行安全配置
如果说相对spring-boot-admin的监控界面做一个安全的验证可以在spring-boot-admin中实现如下代码
import de.codecentric.boot.admin.server.config.AdminServerProperties;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
public class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
private final String adminContextPath;
public SecurityPermitAllConfig(AdminServerProperties adminServerProperties) {
this.adminContextPath = adminServerProperties.getContextPath();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
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();
//启用 HTTP-Basic,用于springBoot Admin Client 注册
}
}
在配置文件中加入下面的配置
spring.security.user.password=123456
spring.security.user.name=xiaoming
这样再次启动应用后访问 http://localhost:9091/ 时会让你输入用户名和密码,如下图所示
在这个页面中输入你配置文件中配置的用户名和密码即可。