zoukankan      html  css  js  c++  java
  • Spring Cloud第十三篇 | Spring Boot Admin服务监控

    本文是Spring Cloud专栏的第十三篇文章,了解前十二篇文章内容有助于更好的理解本文:

    1. Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览

    2. Spring Cloud第二篇 | 使用并认识Eureka注册中心

    3. Spring Cloud第三篇 | 搭建高可用Eureka注册中心

    4. Spring Cloud第四篇 | 客户端负载均衡Ribbon

    5. Spring Cloud第五篇 | 服务熔断Hystrix

    6. Spring Cloud第六篇 | Hystrix仪表盘监控Hystrix Dashboard

    7. Spring Cloud第七篇 | 声明式服务调用Feign

    8. Spring Cloud第八篇 | Hystrix集群监控Turbin

    9. Spring Cloud第九篇 | 分布式服务跟踪Sleuth

    10. Spring Cloud第十篇 | 分布式配置中心Config

    11. Spring Cloud第十一篇 | 分布式配置中心高可用

    12. Spring Cloud第十二篇 | 消息总线Bus

    一、前言

        Spring Boot Admin 是一个管理和监控你的 Spring Boot 应用程序的应用程序。这些应用程序通过 Spring Boot Admin Client(通过 HTTP)注册或者使用 Spring Cloud(例如 Eureka)发现。UI只是 Spring Boot Actuator 端点上的一个 AngularJs 应用程序。

        原理:Spring Boot Actuator 模块为监控Spring Boot 应用程序暴露的大量的管理端点[ENDPOINT],在Spring Boot Actuator的基础上提供简洁的可视化WEB UI,是用来管理 Spring Boot 应用程序的一个简单的界面。

    二、使用Spring Boot Admin监控服务

    Spring Boot Admin也分为server和client(普通应用程序)

    1、搭建Admin服务端

    1-1、创键springboot admin服务端模块(springboot-admin-server)

    1-2、添加springboot admin服务端依赖

    <dependency>
      <groupId>de.codecentric</groupId>
      <artifactId>spring-boot-admin-starter-server</artifactId>
      <version>2.1.0</version>
    </dependency>

    1-3、在主类上添加注解@EnableAdminServer

    1-4、在application.yml文件中添加配置,然后启动

    server:
      port: 8788
    spring:
      application:
        name: springboot-admin-server

    2、搭建Admin客户端

    2-1、创建springboot admin客户端模块(springcloud-admin-client)

    2-2、添加springboot admin客户端依赖

    <dependency>
      <groupId>de.codecentric</groupId>
       <artifactId>spring-boot-admin-starter-client</artifactId>
       <version>2.1.0</version>
    </dependency>

    2-3、在application.yml文件中添加配置,然后启动

    server:
      port: 8080
    spring:
      application:
        name: springcloud-admin-client
      boot:
        admin:
          client:
          #springboot admin client连接 spring boot admin server 端点地址springboot admin client连接 spring boot admin server 端点地址
            url: http://localhost:8788
            instance:
            #默认使用的是主机名注册,改为使用ip注册
              prefer-ip: true
    management:
      endpoints:
        web:
          exposure:
            #开放所有页面节点  默认只开启了health、info两个节点
            include: '*'
      endpoint:
        health:
          #显示健康具体信息  默认不会显示详细信息
          show-details: always
    # 利用info端点,加入版本等信息
    info:
      versin: @project.version@
      name: @project.artifactId@
      group: @project.groupId@
      description: @project.description@
      #还可以自定义信息
      author: Coding Farmer
      blog: http://www.coding-farmer.cn

    2-4、启动访问spring boot admin服务端页面http://localhost:8788,显示如下

    3、给Sring Boot Admin添加认证

    i、修改admin服务端(springboot-admin-server)模块

    3-i-1、在生产环境中,为了数据的安全,还是需要加上安全认证的,具体的可以查看官方文档:https://codecentric.github.io/spring-boot-admin/2.1.0/#_securing_spring_boot_admin_server,相对比较简单,简单来说就是加入spring-boot-starter-security进行安全认证。

    3-i-2、在admin服务端(springboot-admin-server)模块添加依赖

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    3-i-3、在application.yml中添加用户名、密码

    spring:
      security:
        user:
          name: coding-farmer
          password: 123456

    3-i-4、编辑SpringbootAdminServerApplication.java文件,修改为

    package com.springcloudlearn;
    import de.codecentric.boot.admin.server.config.AdminServerProperties;
    import de.codecentric.boot.admin.server.config.EnableAdminServer;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
    import org.springframework.context.annotation.Configuration;
    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;
    import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
    @EnableAdminServer
    @SpringBootApplication
    public class SpringbootAdminServerApplication {
      public static void main(String[] args) {
        SpringApplication.run(SpringbootAdminServerApplication.class, args);
      }
      @Configuration
      public static 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");
          successHandler.setDefaultTargetUrl(adminContextPath + "/");
          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()
              .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
              .ignoringAntMatchers(
                  adminContextPath + "/instances",
                  adminContextPath + "/actuator/**"
              );
          // @formatter:on
        }
      }
    }

    3-i-5、访问http://localhost:8788

    ii、修改admin客户端(springboot-admin-client)模块

    3-ii-1、由于服务端配置了密码,客户端访问的时候需要密码,这是基于SBA访问模式,也就是所谓的直接连接springboot admin服务端模式,在application.yml文件中添加username,password

    spring:
      application:
        name: springcloud-admin-client
      boot:
        admin:
          client:
          #springboot admin client连接 spring boot admin server 端点地址springboot admin client连接 spring boot admin server 端点地址
            url: http://localhost:8788
            instance:
            #默认使用的是主机名注册,改为使用ip注册
              prefer-ip: true
            username: coding-farmer
            password: 123456

    3-ii-2、然后启动客户端(springboot-admin-client)模块,访问http://localhost:8788,查看客户端服务注册到了admin服务端上

    三、使用Spring Boot Admin监控Spring Cloud服务结合Eureka注册中心

        当我们监控微服务的时候,服务数量众多,我们肯定想统一管理微服务,我可以将服务全部注册到注册中心上,admin会自己拉取Eureka上注册的应用信息,主动去注册。这也是唯一区别之前手动注册(SBA连接方式)的地方,就是client端不需要admin-client的依赖,也不需要配置admin地址了,一切全部由admin-server自己实现。这样的设计对环境变化很友好,不用改了admin-server后去改所有应用的配置了。

    1、在上面基础上继续修改Admin服务端

    1-1、添加依赖

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

    1-2、在启动类上添加Eureka的注解@EnableEurekaClient

    1-3、修改后application.yml配置文件如下,然后启动

    server:
      port: 8788
    spring:
      application:
        name: springboot-admin-server
      security:
        user:
          name: coding-farmer
          password: 123456
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8700/eureka
        #客户端每隔30秒从Eureka服务上更新一次服务信息
        registry-fetch-interval-seconds: 30
        #需要将我的服务注册到eureka上
        register-with-eureka: true
        #需要检索服务
        fetch-registry: true
      #心跳检测检测与续约时间
      instance:
        #告诉服务端,如果我10s之内没有给你发心跳,就代表我故障了,将我剔除掉,默认90s
        #Eureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒,超过则剔除(客户端告诉服务端按照此规则等待自己)
        lease-expiration-duration-in-seconds: 10
        #每隔2s向服务端发送一次心跳,证明自已依然活着,默认30s
        #Eureka客户端向服务端发送心跳的时间间隔,单位为秒(客户端告诉服务端自己会按照该规则)
        lease-renewal-interval-in-seconds: 2
        # 启用ip配置 这样在注册中心列表中看见的是以ip+端口呈现的
        prefer-ip-address: true
        # 实例名称  最后呈现地址:ip:2002
        instance-id: ${spring.cloud.client.ip-address}:${server.port}
        health-check-url-path: /actuator/health
     
       #Eureka 中的 metadataMap 是专门用来存放一些自定义的数据,
       # 当注册中心或者其他服务需要此服务的某些配置时可以在 metadataMap 里取。
       # 实际上,每个 instance 都有各自的 metadataMap,map 中存放着需要用到的属性。
       # 例如,上面配置中的 eureka.instance.metadata-map.username,当这个服务成功注册到 Eureka 上,
       # Spring Boot Admin 就会取拿到这个 instance,进而拿到 metadataMap 里的属性,
       # 然后放入请求头,向此服务发送请求,访问此服务的 Actuator 开放的端点。
       #说白了,这个为了连接到自己,把密码告诉eureka,spring boot admin server 拿着密码去连接客户端应用,监控信息
        metadata-map:
          user.name: ${spring.security.user.name}
          user.password: ${spring.security.user.password}
          
    #使用注册中心后,他admin也可以监控自身服务状况
    management:
      endpoints:
        web:
          exposure:
            #开放所有页面节点  默认只开启了health、info两个节点
            include: '*'
      endpoint:
        health:
          #显示健康具体信息  默认不会显示详细信息
          show-details: always
    # 利用info端点,加入版本等信息
    info:
      versin: @project.version@
      name: @project.artifactId@
      group: @project.groupId@
      description: @project.description@
      #还可以自定义信息
      author: Coding Farmer
      blog: http://www.coding-farmer.cn

    1-4、访问如下http://localhost:8788,使用注册中心之后他也可以监控自身服务的状况

    2、在上面基础上继续修改Admin客户端

    2-1、添加依赖

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

    2-2、在启动类上添加注解@EnableEurekaClient

    2-3、启动Admin客户端,然后访问Admin服务端http://localhost:8788,你会看到还有Admin服务端已被监控了

    详细参考案例源码:https://gitee.com/coding-farmer/springcloud-learn

  • 相关阅读:
    Nginx部署部分https与部分http【转】
    MySQL指定使用某个索引查询语句
    MySQL创建相同表和数据命令
    Apache+jboss群集部署
    运维小知识之nginx---nginx配置Jboss集群负载均衡
    SSL证书生成方法【转】
    Nginx搭建https服务器
    基于OpenSSL实现C/S架构中的https会话
    OnlineJudgeServer运行
    百科知识 isz文件如何打开
  • 原文地址:https://www.cnblogs.com/coding-farmer/p/12309272.html
Copyright © 2011-2022 走看看