1. 程式人生 > >SpringCloud系列-使用SpringBoot Admin構建微服務監控

SpringCloud系列-使用SpringBoot Admin構建微服務監控

簡介

Spring Boot Admin 用於管理和監控一個或者多個Spring Boot 程式。 Spring Boot Admin 分
為 Server 端和 Client 端, Client 端可以通過 Http 向 Server 端註冊,也可以結合 Spring Cloud
的服務註冊元件 Eureka 進行註冊。 Spring Boot Admin 提供了用 AngularJs 編寫的 Ul 介面,用
於管理和監控。其中監控內容包括 Spring Boot 的監控元件 Actuator 的各個 Http 節點,也支援
更高階的功能,包括 Turbine 、 Jmx 、 Loglevel 等。

本文以案例的形式來講解 Spring Boot Admin , 主要包括以下的內容。

  • 使用 Spring Boot Admin 監控 Spring Cloud 微服務 。
  • Spring Boot Adm in 整合 Turbine,聚合監控微服務系統中熔斷器的狀況。
  • Spring Boot Admin 整合 Security 安全登入介面。

使用SpringBootAdmin來監控SpringCloud微服務

本案例需要使用 3 個工程,分別為服務註冊中心 Eureka Server、服務客戶端 Eureka Client和 Spring Boot Admin Server。本案例是一個 Maven 多 Module 的工程,需要建立一個主 Maven工程,主 Maven 工程指定了 Spring Boot 版本為 2.0.3.RELEASE, Spring Cloud 版本為 Finchley.RELEASE。其中 Eureka Server 的埠號為 8761

構建maven聚合工程

  • 建立父工程

Type選擇maven pom,點選Next
選擇Lombok依賴點選Next
在這裡插入圖片描述

  • 修改pom.xml檔案
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.tinckay</groupId>
    <artifactId>sc-f-chapter14</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <name>sc-f-chapter14</name>
    <description>Demo project for Spring Boot Security</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <modules>
    	<module>eureka-server</module>
        <module>admin-server</module>
        <module>admin-client</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    
</project>

構建Eureka Server

  • 在父工程下面建立一個maven project命名為eureka-server,建立完成後修改pom.xml檔案如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.tinckay</groupId>
    <artifactId>eureka-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>eureka-server</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>com.tinckay</groupId>
        <artifactId>sc-f-chapter14</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/>
    </parent>

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

</project>
  • 修改properties.yml檔案
server:
  port: 8761

spring:
  application:
    name: eurka-server

eureka:
  server:
    # 測試時關閉自我保護機制,保證不可用服務及時踢出,預設為true,建議生產環境啟動,測試環境關閉
    #enable-self-preservation: false
    # 啟用主動失效,並且每次主動失效檢測間隔為5s
    eviction-interval-timer-in-ms: 5000
    #eureka server重新整理readCacheMap的時間,注意,client讀取的是readCacheMap,這個時間決定了多久會把readWriteCacheMap的快取更新到readCacheMap上,預設30s
    response-cache-update-interval-ms: 10000
    #eureka server快取readWriteCacheMap失效時間,這個只有在這個時間過去後快取才會失效,失效前不會更新,過期後從registry重新讀取註冊服務資訊,registry是一個ConcurrentHashMap。
    #由於啟用了evict其實就用不太上改這個配置了,預設180s
    response-cache-auto-expiration-in-seconds: 180
  
  instance:
    hostname: 127.0.0.1
  client:
    registerWithEureka: false
    fetch-registry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  • 在Application啟動類上加上@EnableEurekaServer註解

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

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

構建Admin Server

  • 建立admin-server工程
    -[在這裡插入圖片描述](https://img-blog.csdnimg.cn/20181219112906163.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbmd4dWFuNDU0Nw==,size_16,color_FFFFFF,t_70)

然後Next,Finish建立好工程。

在主 Maven 工程下建立一個 Module 工程,取名為 admin-server。程作為 Spring Boot Admin
Server 工程 ,用 於對微服務系統進行監控和管理。首先 , 在 admin-server 工程的 porn 檔案引入
相關的依賴,包捐繼承了主 Maven 的 porn 檔案、 Spring Boot Admin Server 功能的兩個依賴
spring-boot-admin-server 和 spring-boot-admin-server-ui 、 ureka Client 的起步依賴 spring-cloudstarter-eureka 、 Actuator 的起步依賴 spring-boot-starter-actuator。最後,在管理介面中需要與JMX-Beans 進行互動,在 porn 檔案中引入 Jolokia 的依賴 。 porn 件的依賴程式碼如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <name>admin-server</name>
    <description>Demo project for Spring Boot</description>

    <groupId>com.tinckay</groupId>
    <artifactId>admin-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <parent>
        <groupId>com.tinckay</groupId>
        <artifactId>sc-f-chapter14</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-server-ui</artifactId>
            <version>2.0.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jolokia</groupId>
            <artifactId>jolokia-core</artifactId>
        </dependency>
    </dependencies>
    
</project>

在 admin-server 工程的配置檔案 application.yml 服務註冊地址為http://localhost:876l/eureka/,服務的埠號為 5000 。 由於 Spring Boot 在 1.5 版本之後, Actuator 的所有 API 介面預設開啟了安全驗證。為了講解方便,在本案例中關閉安全驗證,即將 management.security.enabled改為 false 。日誌的輸出路徑為“ logs/boot-admin-sample.log ”。 Spring Boot Admin 預設開啟env , metrics ,dump,jolokia 和 info 等節點。配置程式碼如下,更多配置可以查閱官方文件http://codecentric.github.io/spring-boot-admin/1.5 .1/

構建Admin Client

在SpringBoot Admin中整合Turbine

改造Eureka Client

另行構建Eureka Client

構建Turbine工程

在Admin Server中整合Turbine

在SpringBoot Admin中新增安全登陸頁面