Spring Cloud第十三篇 | Spring Boot Admin服務監控

本文是Spring Cloud專欄的第十三篇文章,瞭解前十二篇文章內容有助於更好的理解本文:java

  1. Spring Cloud第一篇 | Spring Cloud前言及其經常使用組件介紹概覽git

  2. Spring Cloud第二篇 | 使用並認識Eureka註冊中心github

  3. Spring Cloud第三篇 | 搭建高可用Eureka註冊中心web

  4. Spring Cloud第四篇 | 客戶端負載均衡Ribbonspring

  5. Spring Cloud第五篇 | 服務熔斷Hystrix安全

  6. Spring Cloud第六篇 | Hystrix儀表盤監控Hystrix Dashboardspringboot

  7. Spring Cloud第七篇 | 聲明式服務調用Feignapp

  8. Spring Cloud第八篇 | Hystrix集羣監控Turbin負載均衡

  9. Spring Cloud第九篇 | 分佈式服務跟蹤Sleuth分佈式

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

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

  12. Spring Cloud第十二篇 | 消息總線Bus

1、前言

    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 應用程序的一個簡單的界面。

2、使用Spring Boot Admin監控服務

Spring Boot Admin也分爲server和client(普通應用程序)

一、搭建Admin服務端

1-一、創鍵springboot admin服務端模塊(springboot-admin-server)

1-二、添加springboot admin服務端依賴

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

1-三、在主類上添加註解@EnableAdminServer

1-四、在application.yml文件中添加配置,而後啓動

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

二、搭建Admin客戶端

2-一、建立springboot admin客戶端模塊(springcloud-admin-client)

2-二、添加springboot admin客戶端依賴

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

2-三、在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-四、啓動訪問spring boot admin服務端頁面http://localhost:8788,顯示以下

三、給Sring Boot Admin添加認證

i、修改admin服務端(springboot-admin-server)模塊

3-i-一、在生產環境中,爲了數據的安全,仍是須要加上安全認證的,具體的能夠查看官方文檔:https://codecentric.github.io/spring-boot-admin/2.1.0/#_securing_spring_boot_admin_server,相對比較簡單,簡單來講就是加入spring-boot-starter-security進行安全認證。

3-i-二、在admin服務端(springboot-admin-server)模塊添加依賴

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

3-i-三、在application.yml中添加用戶名、密碼

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

3-i-四、編輯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-五、訪問http://localhost:8788

ii、修改admin客戶端(springboot-admin-client)模塊

3-ii-一、因爲服務端配置了密碼,客戶端訪問的時候須要密碼,這是基於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-二、而後啓動客戶端(springboot-admin-client)模塊,訪問http://localhost:8788,查看客戶端服務註冊到了admin服務端上

3、使用Spring Boot Admin監控Spring Cloud服務結合Eureka註冊中心

    當咱們監控微服務的時候,服務數量衆多,咱們確定想統一管理微服務,我能夠將服務所有註冊到註冊中心上,admin會本身拉取Eureka上註冊的應用信息,主動去註冊。這也是惟一區別以前手動註冊(SBA鏈接方式)的地方,就是client端不須要admin-client的依賴,也不須要配置admin地址了,一切所有由admin-server本身實現。這樣的設計對環境變化很友好,不用改了admin-server後去改全部應用的配置了。

一、在上面基礎上繼續修改Admin服務端

1-一、添加依賴

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

1-二、在啓動類上添加Eureka的註解@EnableEurekaClient

1-三、修改後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-四、訪問以下http://localhost:8788,使用註冊中心以後他也能夠監控自身服務的情況

二、在上面基礎上繼續修改Admin客戶端

2-一、添加依賴

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

2-二、在啓動類上添加註解@EnableEurekaClient

2-三、啓動Admin客戶端,而後訪問Admin服務端http://localhost:8788,你會看到還有Admin服務端已被監控了

 

詳細參考案例源碼:https://gitee.com/coding-farmer/spirngcloud-learn

 

相關文章
相關標籤/搜索