Spring Cloud實戰系列(八) - 微服務監控Spring Boot Admin

相關

  1. Spring Cloud實戰系列(一) - 服務註冊與發現Eureka php

  2. Spring Cloud實戰系列(二) - 客戶端調用Rest + Ribbon css

  3. Spring Cloud實戰系列(三) - 聲明式客戶端Feign html

  4. Spring Cloud實戰系列(四) - 熔斷器Hystrix 前端

  5. Spring Cloud實戰系列(五) - 服務網關Zuul java

  6. Spring Cloud實戰系列(六) - 分佈式配置中心Spring Cloud Configgit

  7. Spring Cloud實戰系列(七) - 服務鏈路追蹤Spring Cloud Sleuthgithub

  8. Spring Cloud實戰系列(八) - 微服務監控Spring Boot Adminweb

  9. Spring Cloud實戰系列(九) - 服務認證受權Spring Cloud OAuth 2.0 spring

  10. Spring Cloud實戰系列(十) - 單點登陸JWT與Spring Security OAuth apache

前言

Spring Boot Admin 是一個 管理監控 Spring Boot 應用程序 的一款開源軟件。Spring Boot Admin 分爲 Server 端和 Client 端,Spring Boot Admin UI 部分使用 AngularJS 將數據展現在前端。

正文

1. 項目結構

  • Eureka Server服務註冊中心,端口號爲 8761

  • Admin Server:用於對 微服務系統 進行統一的 監控管理

  • Admin Client客戶端 集成 Admin

2. 構建Admin Server

新建一個 Spring Boot 的項目模塊,取名爲 admin-server,其完整依賴以下:

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>io.github.ostenant.springcloud</groupId>
    <artifactId>admin-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>

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

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Dalston.RELEASE</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-server-ui</artifactId>
            <version>1.5.1</version>
        </dependency>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-server</artifactId>
            <version>1.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <!-- 管理界面與JMX-Beans交互 -->
        <dependency>
            <groupId>org.jolokia</groupId>
            <artifactId>jolokia-core</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </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>
複製代碼

配置 application.yml,設置 management.security.enabled=false,保證 安全驗證 關閉,設置 Spring Boot Admin 默認開啓的 服務端點

eureka:
 client:
 service-url:
 defaultZone: http://localhost:8761/eureka/
server:
 port: 5000
spring:
 application:
 name: admin-server
 boot:
 admin:
 routes:
 endpoints: env,metrics,dump,jolokia,info,configprops,trace,logfile,refresh,flyway,liquibase,heapdump,loggers,auditevents,hystrix.stream
management:
 security:
 enabled: false
logging:
 file: "logs/boot-admin-sample.log"
複製代碼

src/main/resources 目錄下新建一個 logback-spring.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <jmxConfigurator/>
</configuration>
複製代碼

在應用的 啓動類 上經過註解 @EnableAdminServer 開啓 Admin Server 的功能。

@EnableEurekaClient
@EnableAdminServer
@SpringBootApplication
public class AdminServerApplication {

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

Admin Server 建立完成,運行 AdminServerApplication 啓動應用程序!

2. 構建Admin Client

新建一個 Spring Boot 的項目模塊,取名爲 admin-client,其完整依賴以下:

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>io.github.ostenant.springcloud</groupId>
    <artifactId>admin-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>

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

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Dalston.RELEASE</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jolokia</groupId>
            <artifactId>jolokia-core</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </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>
複製代碼

配置 application.yml 文件,設置 日誌輸出路徑,並關閉 Actuator 模塊的 安全驗證

eureka:
 client:
 service-url:
 defaultZone: http://localhost:8761/eureka/
server:
 port: 8762
spring:
 application:
 name: admin-client
management:
 security:
 enabled: false
logging:
 file: "logs/boot-admin-client.log"
複製代碼

在應用的 啓動類 上加上 @EnableEurekaClient 註解,開啓 EurekaClient 的功能。

@SpringBootApplication
@EnableEurekaClient
public class AdminClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(AdminClientApplication.class, args);
    }
}
複製代碼

3. 啓動應用程序

依次啓動 eureka-serveradmin-serveradmin-client 模塊,訪問 admin-server 的主頁 http://localhost:5000,瀏覽器顯示界面如圖所示:

JOURNAL 選項爲 服務註冊下線剔除時間線

4. 添加安全登陸界面

Spring Boot Admin 提供了登陸界面的組件,而且和 Spring Boot Security 結合使用,須要 用戶登陸 才能訪問。在 Admin Serverpom.xml 文件中引入如下依賴:

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-server-ui-login</artifactId>
    <version>1.5.0</version>
</dependency>
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-security</artifactId>
</dependency>
複製代碼

admin-server 模塊的 application.yml 中完成以下配置,建立一個 securityuser 用戶,它的用戶名爲 admin,密碼爲 123456。經過 eureka.instance.metadate-map 配置屬性 帶上該 securityuser 用戶信息。

security:
 user:
 name: admin
 password: 123456
eureka:
 instance:
 metadata-map:
      user.name: admin
      user.password: 123456
複製代碼

而後在 應用程序 中配置 Spring Boot Security,建立一個 SecurityConfig配置類,給 靜態資源 加上 permitAll() 權限,其餘的 資源訪問 則須要 權限認證,另外這些資源不支持 CSFR跨站請求僞造),因此禁用掉 CSFR,最後須要開啓 HTTP 的基本認證,即 httpBasic() 方法。

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.formLogin().loginPage("/login.html").loginProcessingUrl("/login").permitAll();
        http.logout().logoutUrl("/logout");
        http.csrf().disable();

        http.authorizeRequests()
                .antMatchers("/login.html", "/**/*.css", "/img/**", "/third-party/**")
                .permitAll();
        http.authorizeRequests().antMatchers("/**").authenticated();

        http.httpBasic();
    }
}
複製代碼

從新啓動 admin-server 項目模塊,在瀏覽器中訪問 admin-client 的地址 http://localhost:5000,在登陸界面輸入用戶名 admin,密碼爲 123456,登陸便可。

參考

  • 方誌朋《深刻理解Spring Cloud與微服務構建》

歡迎關注技術公衆號: 零壹技術棧

零壹技術棧

本賬號將持續分享後端技術乾貨,包括虛擬機基礎,多線程編程,高性能框架,異步、緩存和消息中間件,分佈式和微服務,架構學習和進階等學習資料和文章。

相關文章
相關標籤/搜索