Spring Boot Admin 介紹

1.概述

Spring Boot Admin是一個Web應用,用於管理和監視Spring Boot應用程序的運行狀態。每個Spring Boot應用程序都被視爲客戶端並註冊到管理服務器。背後的數據採集是由Spring Boot Actuator端點提供。

在本文中,我們將描述配置Spring Boot Admin服務器的步驟以及應用程序如何成爲客戶端。

2.設置管理服務器

首先,我們需要創建一個簡單的Spring Boot Web應用程序,添加以下Maven依賴項:

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-server</artifactId>
    <version>1.5.4</version>
</dependency>
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-server-ui</artifactId>
    <version>1.5.4</version>
</dependency>

添加此之後,@ EnableAdminServer將可用。我們將其添加到主類中,如下例所示:

@EnableAdminServer
@SpringBootApplication
public class SpringBootAdminServerApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(SpringBootAdminServerApplication.class, args);
    }
}

此時,服務器已準備好啓動並可以註冊客戶端應用程序。

3.設置客戶端

在我們設置了管理服務器之後,我們可以將一個Spring Boot應用程序註冊爲客戶端。我們必須添加以下Maven依賴項:

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

剩下的唯一事情就是配置客戶端以訪問管理服務器的URL。爲此,我們只需添加以下屬性:

spring.boot.admin.url=http://localhost:8080
management.security.enabled=false

4.安全配置

Spring Boot Admin服務器可以訪問應用程序的敏感端點,因此建議爲管理員和客戶端應用程序添加一些安全配置。

首先,我們將專注於配置管理服務器的安全性。我們必須添加以下Maven依賴項:

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-server-ui-login</artifactId>
    <version>1.5.4</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

這將爲管理應用程序添加登錄界面以啓用安全性。

之後,我們將添加一個安全配置類,如下所示:

@Configuration
public class WebSecurityConfig 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();
    }
}

這是一個簡單的安全配置,但添加後,我們會注意到客戶端無法再註冊到服務器。

爲了將客戶端註冊到新的安全服務器,我們必須在客戶端的屬性文件中添加更多配置:

spring.boot.admin.username=admin
spring.boot.admin.password=admin

現在管理服務器處於安全的環境中,但客戶端不是。在生產系統中,我們試圖監控的應用程序自然也應該受到保護。

因此,我們也將爲客戶端添加安全性 - 我們將在管理服務器的UI界面中注意到客戶端信息不再可用。

我們必須添加一些我們將發送到管理服務器的元數據。服務器使用此信息連接到客戶端的端點:

management.security.enabled=true
security.user.name=client
security.user.password=client
spring.boot.admin.client.metadata.user.name=${security.user.name}
spring.boot.admin.client.metadata.user.password=${security.user.password}

當然,通過HTTP發送憑據並不安全 - 因此通信需要通過HTTPS進行。

5.監控和管理功能

可以將Spring Boot Admin配置爲僅顯示我們認爲有用的信息。我們只需要更改默認配置並添加我們自己需要的指標:

spring.boot.admin.routes.endpoints=env, metrics, trace, jolokia, info, configprops

隨着我們的進一步操作,我們將看到還有一些其他功能可以探索。我們可以使用Jolokia和Loglevel進行JMX bean管理。

Spring Boot Admin還支持使用Hazelcast進行羣集複製。我們只需添加以下Maven依賴項,讓其自動配置完成剩下的工作:

<dependency>
    <groupId>com.hazelcast</groupId>
    <artifactId>hazelcast</artifactId>
</dependency>

如果我們想要一個持久化的Hazelcast實例,我們將使用自定義配置:

@Configuration
public class HazelcastConfig {
 
    @Bean
    public Config hazelcast() {
        return new Config()
          .setProperty("hazelcast.jmx", "true")
          .addMapConfig(new MapConfig("spring-boot-admin-application-store")
            .setBackupCount(1)
            .setEvictionPolicy(EvictionPolicy.NONE))
          .addListConfig(new ListConfig("spring-boot-admin-event-store")
            .setBackupCount(1)
            .setMaxSize(1000));
    }
}

6.通知

接下來,讓我們討論一下如果我們的註冊客戶端出現問題,如何從管理服務器接收通知。

以下通知程序可用於配置:

  • 電子郵件
  • PagerDuty
  • OpsGenie
  • Hipchat
  • Slack
  • Let’s Chat

6.1 郵件通知

這裏我們將專注於爲管理服務器配置郵件通知。爲此,我們必須添加郵件啓動程序依賴項,如下所示:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    <version>1.5.4</version>
</dependency>

在此之後,我們必須添加一些郵件配置:

spring.mail.host=smtp.example.com
spring.mail.username=smtp_user
spring.mail.password=smtp_password
[email protected]

現在,每當我們的註冊客戶將其狀態從UP更改爲OFFLINE或其他情況時,都會向上面配置的地址發送電子郵件。對於其他通知程序,配置類似。

6.2 即時通信Hipchat通知

正如我們所看到的,與Hipchat的整合非常簡單; 只需設置幾個必需屬性:

spring.boot.admin.notify.hipchat.auth-token=<generated_token>
spring.boot.admin.notify.hipchat.room-id=<room-id>
spring.boot.admin.notify.hipchat.url=https://yourcompany.hipchat.com/v2/

有了這些定義後,我們會在Hipchat注意到,只要客戶的狀態發生變化,我們就會收到通知。

6.3。自定義通知配置

我們可以配置一個自定義通知系統,爲我們提供一些強大的工具。我們可以使用提醒通知程序發送預定通知,直到客戶端狀態發生變化。

或者我們可能希望向過濾的客戶端集發送通知。爲此,我們可以使用過濾通知程序:

Configuration
@EnableScheduling
public class NotifierConfiguration {
 
    @Autowired private Notifier notifier;
 
    @Bean
    public FilteringNotifier filteringNotifier() {
        return new FilteringNotifier(notifier);
    }
 
    @Bean
    @Primary
    public RemindingNotifier remindingNotifier() {
        RemindingNotifier remindingNotifier 
          = new RemindingNotifier(filteringNotifier());
        remindingNotifier.setReminderPeriod(TimeUnit.MINUTES.toMillis(5));
        return remindingNotifier;
    }
 
    @Scheduled(fixedRate = 60_000L)
    public void remind() {
        remindingNotifier().sendReminders();
    }
}

7.結論

本入門教程介紹了使用Spring Boot Admin監視和管理其它Spring Boot應用程序必須執行的簡單步驟。

自動配置允許我們只需要添加一些基本的配置,就能夠得到一個正常工作的管理服務器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章