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聚合工程
- 建立父工程
- 修改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工程
然後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/