Spring Boot管理者ガイド

1概要

Spring Boot Adminは、Spring Bootアプリケーションの管理と監視に使用されるWebアプリケーションです。各アプリケーションはクライアントと見なされ、管理サーバーに登録されます。舞台裏では、魔法はSpring Boot Actuatorエンドポイントによって与えられます。

この記事では、Spring Boot Adminサーバーを構成する手順と、アプリケーションがクライアントになる方法について説明します。

2管理サーバーの設定

まず最初に、シンプルなSpring Boot Webアプリケーションを作成し、次のhttps://search.maven.org/classic/#search%7Cga%7C1%7Cspring-boot-admin-server[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管理サーバーはアプリケーションの機密性の高いエンドポイントにアクセスできるため、管理アプリケーションとクライアントアプリケーションの両方にセキュリティ設定を追加することをお勧めします。

まず、管理サーバーのセキュリティ設定に焦点を当てます。以下を追加する必要があります。 22[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 を使った JMX beanの管理 と、さらにGooglevelの管理について話しています。

Spring Boot Adminは、Hazelcastを使ったクラスタ複製もサポートしています。次のものを追加するだけでいいです。自動設定に残りをさせる:

<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. お知らせ

次に、登録したクライアントに問題が発生した場合に管理サーバーから通知を受け取る可能性について説明しましょう。次の通知機能が設定に使用できます。

  • Eメール

  • PagerDuty

  • OpsGenie

  • ヒップチャット

  • スラック

  • チャットしよう

6.1. メール通知

管理サーバーのメール通知の設定に焦点を当てます。これを実現するには、https://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22org.springframework.boot%22%20AND%20a%3A%22spring-bootを追加する必要があります。 -starter-mail%22[メールスタータの依存関係]以下のようになります。

<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またはその他に変更するたびに、上記で設定したアドレスにEメールが送信されます。

他の通知機能についても、構成は同様です。

====  **  6.2. ヒップチャット通知**

お分かりのように、Hipchatとの統合は非常に簡単です。設定する必須プロパティはいくつかあります。

[source,text,gutter:,true]

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. カスタマイズされた通知設定

これを実現するための強力なツールを自由に使用してカスタム通知システムを構成できます。 reminding notifier を使用して、クライアントのステータスが変わるまでスケジュールされた通知を送信できます。

あるいは、フィルタリングされたクライアントのセットに通知を送りたいと思うかもしれません。これには、__filtering通知を使用できます。

@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アプリケーションを監視および管理するためにしなければならない簡単な手順を説明します。

自動設定により、いくつかのマイナーな設定のみを追加し、最後に完全に機能する管理サーバーを作成することができます。

そして、いつものように、このガイドのサンプルコードはhttps://github.com/eugenp/tutorials/tree/master/spring-boot-admin[over on Github]にあります。