spring boot 2.0.3+spring cloud (Finchley)8、微服务监控Spring Boot Admin

Spring Boot Admin 用于管理和监控一个或多个Spring Boot程序,在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI,提供如下功能:

  • 显示 name/id 和版本号
  • 显示在线状态
  • Logging 日志级别管理
  • JMX beans 管理
  • Threads 会话和线程管理
  • Trace 应用请求跟踪
  • 应用运行参数信息,如:
    • Java 系统属性
    • Java 环境变量属性
    • 内存信息
    • Spring 环境属性

使用Spring Boot Admin监控Spring Cloud微服务

首先需要一个服务注册中心Eureka Server,让Spring Boot Admin(以下简称 SBA)服务端向它注册服务。

服务端

在主Maven工程下新建Moeule工程admin-server,pom文件引入依赖。其中SBA的依赖必需在dependency中指定version版本号(包括server和client),用spring boot initializer自动建工程,引入依赖时,版本号会写在properties中,2.0.1,而在我的测试中,这样并不能起作用,不能引入依赖。

复制代码



    4.0.0

    com.cralor
    admin-server
    0.0.1-SNAPSHOT
    jar

    admin-server
    Demo project for Spring Boot

    
        com.cralor
        chap12-admin
        0.0.1-SNAPSHOT
         
    

    
        UTF-8
        UTF-8
        1.8
    

    
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        

        
            de.codecentric
            spring-boot-admin-starter-server
            2.0.1
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


复制代码

启动类加上注解@EnableAdminServer

复制代码

@EnableAdminServer
@SpringBootApplication
public class AdminServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(AdminServerApplication.class, args);
    }
}

复制代码

配置文件配置端口号、程序名、服务注册中心地址。

复制代码

server:
  port: 5000
spring:
  application:
    name: admin-server
eureka:
  client:
    service-url:
      defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/

复制代码

客户端

在建立了我们的服务端之后,我们可以将一个 Spring Boot 应用程序注册为客户端。注册客户端有两种方式,一种就是通过引入 SBA Client,另外一种是基于 Spring Cloud Discovery。我们这里先介绍通过引入 SBA Client 的方式。

SBA Client

新建工程admin-client。pom文件引入依赖,客户端需要引入actuator依赖,服务端不需要。

复制代码


    de.codecentric
    spring-boot-admin-starter-client
    2.0.1



    org.springframework.boot
    spring-boot-starter-actuator

复制代码

配置文件:SBA服务端http://localhost:5000,actuator监控暴露全部端口,显示所有信息。

复制代码

server:
  port: 8762
spring:
  application:
    name: admin-client
  boot:
    admin:
      client:
        url: http://localhost:5000
eureka:
  instance:
    leaseRenewalIntervalInSeconds: 10 #表示eureka client发送心跳给server端的频率,默认为30秒
    health-check-url-path: /actuator/health #健康检查的地址(依赖spring-boot-starter-actuator)
  client:
    registryFetchIntervalSeconds: 5 #表示eureka client间隔多久去拉取服务注册信息,默认为30秒
    service-url:
      defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: ALWAYS

复制代码

依次启动eureka-server、admin-server和admin-client(两个客户端8762、8763)。访问SBA服务端http://localhost:5000

Wallboard:

spring boot 2.0.3+spring cloud (Finchley)8、微服务监控Spring Boot Admin_第1张图片

 Applications:

spring boot 2.0.3+spring cloud (Finchley)8、微服务监控Spring Boot Admin_第2张图片

 Journal:

spring boot 2.0.3+spring cloud (Finchley)8、微服务监控Spring Boot Admin_第3张图片

 Instance details:

spring boot 2.0.3+spring cloud (Finchley)8、微服务监控Spring Boot Admin_第4张图片

Spring Cloud Discovery

如果我们的项目中使用了 Spring Cloud,那么我们其实并不用通过 SBA Client 来向 SBA 注册,而是让 SBA 通过注册中心(Eureka、Consul 等)来发现服务。这里以 Eureka 作为注册中心来说明。

 在admin-client中只需要改变引入的依赖,其他不需要改变。

复制代码


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client



    
    
    



    org.springframework.boot
    spring-boot-starter-actuator

复制代码

重启 SBA 服务端和客户端,就能看的和使用 SBA Client 一样的效果了。

在Spring Boot Admin中集成Turbine

 因为SBA最新版本为2.0.1,而spring-boot-admin-server-ui-turbine的版本为1.5.7,整合会出现问题,暂时不做测试。。。

安全配置,在Spring Boot Admin中添加安全登陆界面

SBA 服务端可以访问客户端的敏感端点,因此手册上 建议我们应该为服务端和客户端添加一些安全配置。

服务端的安全配置

向服务端添加 Spring Security 依赖


    org.springframework.boot
    spring-boot-starter-security
 
  

配置文件设置账号密码,并添加一些配置

复制代码

server:
  port: 5000
spring:
  application:
    name: admin-server
  security:
    user:
      name: 'admin'
      password: 'admin'
eureka:
  client:
    registryFetchIntervalSeconds: 5
    service-url:
      defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
  instance:
    leaseRenewalIntervalInSeconds: 10
    health-check-url-path: /actuator/health
    metadata-map:
      user.name: ${spring.security.user.name}
      user.password: ${spring.security.user.password}

management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: ALWAYS

复制代码

新增一个安全配置类。

复制代码

@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
    }

}

复制代码

一个简单的安全配置就完成了,访问 http://localhost:5000 就会发现需要认证了。

 spring boot 2.0.3+spring cloud (Finchley)8、微服务监控Spring Boot Admin_第5张图片

如果这时你的客户端是使用的 SBA Client 的方式,你会注意到客户端这时已无法再注册到服务端了(Spring Cloud Discovery 的话不受影响)。为了能将客户端注册到服务端,我们还必须在客户端的配置文件中添加以下内容:

spring.boot.admin.client:
  username: "admin"
  password: "admin"

因为 SBA 客户端的注册方式有两种,所以在客户端的安全配置上也是分为了两种。下面我们来为客户端增加安全配置。

客户端的安全配置

SBA Client

客户端的配置文件

复制代码

server:
  port: 8762
spring:
  application:
    name: admin-client
  security:
    user:
      name: "client"
      password: "client"
  boot:
    admin:
      client:
        url: http://localhost:5000
        username: "admin"
        password: "admin"
        instance:
          metadata:
             user.name: ${spring.security.user.name}
             user.password: ${spring.security.user.password}
eureka:
  instance:
    leaseRenewalIntervalInSeconds: 10 #表示eureka client发送心跳给server端的频率,默认为30秒
    health-check-url-path: /actuator/health #健康检查的地址(依赖spring-boot-starter-actuator)
  client:
    registryFetchIntervalSeconds: 5 #表示eureka client间隔多久去拉取服务注册信息,默认为30秒
    service-url:
      defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: ALWAYS

复制代码

重启 SBA Server 和 Clients 可看到效果。

Spring Cloud Discovery

配置文件

复制代码

server:
  port: 8762
spring:
  application:
    name: admin-client
  security:
    user:
      name: "client"
      password: "client"

eureka:
  instance:
    leaseRenewalIntervalInSeconds: 10
    health-check-url-path: /actuator/health
    metadata-map:
      user.name: ${spring.security.user.name}
      user.password: ${spring.security.user.password}
  client:
    registryFetchIntervalSeconds: 5
    service-url:
      defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: ALWAYS

复制代码

重启 SBA Server 和 Clients 。

(ps:在我的测试中,SBA client和Spring Cloud Discovery,不管用这两个配置文件的哪一个都可以...)

Eureka 的 metadataMap

Eureka 中的 metadataMap 是专门用来存放一些自定义的数据,当注册中心或者其他服务需要此服务的某些配置时可以在 metadataMap 里取。实际上,每个 instance 都有各自的 metadataMap,map 中存放着需要用到的属性。例如,上面配置中的 eureka.instance.metadata-map.user.name,当这个服务成功注册到 Eureka 上,Spring Boot Admin 就会取拿到这个 instance,进而拿到 metadataMap 里的属性,然后放入请求头,向此服务发送请求,访问此服务的 Actuator 开放的端点。

关于 SBA 的更多认证方式可以参见 joshiste/spring-boot-admin-samples

 

 案例代码地址:https://github.com/cralor7/springcloud

你可能感兴趣的:(java,SpringBoot,SpringCloud)