Panduan untuk Pentadbir Spring Boot

1. Gambaran keseluruhan

Spring Boot Admin adalah aplikasi web, digunakan untuk mengelola dan memantau aplikasi Spring Boot. Setiap aplikasi dianggap sebagai pelanggan dan mendaftar ke pelayan admin. Di sebalik tabir, keajaiban diberikan oleh titik akhir Spring Boot Actuator.

Dalam artikel ini, kami akan menerangkan langkah-langkah untuk mengkonfigurasi pelayan Spring Boot Admin dan bagaimana aplikasi menjadi klien.

2. Persediaan Pelayan Pentadbir

Pertama sekali, kita perlu membuat aplikasi web Spring Boot yang sederhana dan juga menambahkan kebergantungan Maven berikut:

 de.codecentric spring-boot-admin-starter-server 2.2.2 

Selepas ini, @EnableAdminServer akan tersedia, jadi kami akan menambahkannya ke kelas utama, seperti yang ditunjukkan dalam contoh di bawah:

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

Pada ketika ini, kami bersedia untuk memulakan pelayan dan mendaftarkan aplikasi pelanggan.

3. Menetapkan Pelanggan

Sekarang, setelah kami menyediakan pelayan pentadbir, kami dapat mendaftarkan aplikasi Spring Boot pertama kami sebagai pelanggan. Kita mesti menambahkan kebergantungan Maven berikut:

 de.codecentric spring-boot-admin-starter-client 2.2.2 

Seterusnya, kita perlu mengkonfigurasi klien untuk mengetahui tentang URL asas pelayan pentadbir. Untuk ini berlaku, kami hanya menambah harta berikut:

spring.boot.admin.client.url=//localhost:8080

Bermula dengan Spring Boot 2, titik akhir selain kesihatan dan maklumat tidak didedahkan secara lalai.

Mari dedahkan semua titik akhir:

management.endpoints.web.exposure.include=* management.endpoint.health.show-details=always

4. Konfigurasi Keselamatan

Pelayan Spring Boot Admin mempunyai akses ke titik akhir sensitif aplikasi, jadi disarankan agar kami menambahkan beberapa konfigurasi keselamatan ke aplikasi admin dan klien.

Pada mulanya, kami akan menumpukan pada konfigurasi keselamatan pelayan admin. Kita mesti menambah kebergantungan Maven berikut:

 de.codecentric spring-boot-admin-server-ui-login 1.5.7   org.springframework.boot spring-boot-starter-security 2.1.8.RELEASE 

Ini akan membolehkan keselamatan dan menambahkan antara muka log masuk ke aplikasi pentadbir.

Seterusnya, kami akan menambahkan kelas konfigurasi keselamatan seperti yang anda lihat di bawah:

@Configuration public class WebSecurityConfig extends WebSecurityConfigurerAdapter { private final AdminServerProperties adminServer; public WebSecurityConfig(AdminServerProperties adminServer) { this.adminServer = adminServer; } @Override protected void configure(HttpSecurity http) throws Exception { SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler(); successHandler.setTargetUrlParameter("redirectTo"); successHandler.setDefaultTargetUrl(this.adminServer.getContextPath() + "/"); http .authorizeRequests() .antMatchers(this.adminServer.getContextPath() + "/assets/**").permitAll() .antMatchers(this.adminServer.getContextPath() + "/login").permitAll() .anyRequest().authenticated() .and() .formLogin() .loginPage(this.adminServer.getContextPath() + "/login") .successHandler(successHandler) .and() .logout() .logoutUrl(this.adminServer.getContextPath() + "/logout") .and() .httpBasic() .and() .csrf() .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) .ignoringRequestMatchers( new AntPathRequestMatcher(this.adminServer.getContextPath() + "/instances", HttpMethod.POST.toString()), new AntPathRequestMatcher(this.adminServer.getContextPath() + "/instances/*", HttpMethod.DELETE.toString()), new AntPathRequestMatcher(this.adminServer.getContextPath() + "/actuator/**")) .and() .rememberMe() .key(UUID.randomUUID().toString()) .tokenValiditySeconds(1209600); } }

Terdapat konfigurasi keselamatan yang mudah, tetapi setelah menambahkannya, kami akan melihat bahawa pelanggan tidak dapat mendaftar ke pelayan lagi.

Untuk mendaftarkan klien ke pelayan yang baru diamankan, kita mesti menambahkan beberapa konfigurasi ke dalam fail harta tanah pelanggan:

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

Kami berada di titik di mana kami melindungi pelayan pentadbir kami. Dalam sistem pengeluaran, secara semula jadi, aplikasi yang ingin kita pantau akan selamat. Oleh itu, kami juga akan menambahkan keselamatan kepada pelanggan - dan kami akan melihat di antara muka UI pelayan pentadbir bahawa maklumat pelanggan tidak lagi tersedia.

Kita harus menambahkan beberapa metadata yang akan kita hantar ke pelayan pentadbir. Maklumat ini digunakan oleh pelayan untuk menyambung ke titik akhir pelanggan:

spring.security.user.name=client spring.security.user.password=client spring.boot.admin.client.instance.metadata.user.name=${spring.security.user.name} spring.boot.admin.client.instance.metadata.user.password=${spring.security.user.password}

Menghantar kelayakan melalui HTTP, tentu saja, tidak selamat - jadi komunikasi perlu melalui HTTPS.

5. Ciri Pemantauan dan Pengurusan

Spring Boot Admin boleh dikonfigurasi untuk hanya memaparkan maklumat yang kami anggap berguna. Kita hanya perlu mengubah konfigurasi lalai dan menambahkan metrik yang kita perlukan:

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

Semasa kita melangkah lebih jauh, kita akan melihat bahawa terdapat beberapa ciri lain yang dapat diterokai. Kami bercakap mengenai pengurusan kacang JMX menggunakan Jolokia dan juga pengurusan Loglevel .

Spring Boot Admin juga menyokong replikasi kluster menggunakan Hazelcast. Kita hanya perlu menambahkan kebergantungan Maven berikut dan membiarkan konfigurasi automatik melakukan yang lain:

 com.hazelcast hazelcast 3.12.2 

Sekiranya kita mahukan contoh Hazelcast yang berterusan, kita akan menggunakan konfigurasi tersuai:

@Configuration public class HazelcastConfig { @Bean public Config hazelcast() { MapConfig eventStoreMap = new MapConfig("spring-boot-admin-event-store") .setInMemoryFormat(InMemoryFormat.OBJECT) .setBackupCount(1) .setEvictionPolicy(EvictionPolicy.NONE) .setMergePolicyConfig(new MergePolicyConfig(PutIfAbsentMapMergePolicy.class.getName(), 100)); MapConfig sentNotificationsMap = new MapConfig("spring-boot-admin-application-store") .setInMemoryFormat(InMemoryFormat.OBJECT) .setBackupCount(1) .setEvictionPolicy(EvictionPolicy.LRU) .setMergePolicyConfig(new MergePolicyConfig(PutIfAbsentMapMergePolicy.class.getName(), 100)); Config config = new Config(); config.addMapConfig(eventStoreMap); config.addMapConfig(sentNotificationsMap); config.setProperty("hazelcast.jmx", "true"); config.getNetworkConfig() .getJoin() .getMulticastConfig() .setEnabled(false); TcpIpConfig tcpIpConfig = config.getNetworkConfig() .getJoin() .getTcpIpConfig(); tcpIpConfig.setEnabled(true); tcpIpConfig.setMembers(Collections.singletonList("127.0.0.1")); return config; } }

6. Makluman

Seterusnya, mari kita bincangkan kemungkinan untuk menerima pemberitahuan dari pelayan pentadbir sekiranya sesuatu berlaku dengan pelanggan berdaftar kami. Pemberitahuan berikut tersedia untuk konfigurasi:

  • E-mel
  • Tugas Pager
  • OpsGenie
  • Hipchat
  • Kendur
  • Mari berbual

6.1. Pemberitahuan E-mel

Mula-mula kami akan menumpukan pada mengkonfigurasi pemberitahuan mel untuk pelayan pentadbir kami. Untuk ini berlaku, kita harus menambahkan kebergantungan pemula surat seperti yang ditunjukkan di bawah:

 org.springframework.boot spring-boot-starter-mail 2.1.7.RELEASE 

Selepas ini, kita mesti menambahkan beberapa konfigurasi mel:

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

Now, whenever our registered client changes his status from UP to OFFLINE or otherwise, an email is sent to the address configured above. For the other notifiers, the configuration is similar.

6.2. Hipchat Notifications

As we'll see, the integration with Hipchat is quite straightforward; there are only a few mandatory properties to set:

spring.boot.admin.notify.hipchat.auth-token= spring.boot.admin.notify.hipchat.room-id= spring.boot.admin.notify.hipchat.url=//yourcompany.hipchat.com/v2/

Having these defined, we'll notice in the Hipchat room that we receive notifications whenever the status of the client changes.

6.3. Customized Notifications Configuration

We can configure a custom notification system having at our disposal some powerful tools for this. We can use a reminding notifier to send a scheduled notification until the status of client changes.

Atau mungkin kami ingin menghantar pemberitahuan kepada sekumpulan pelanggan yang disaring. Untuk ini, kita dapat menggunakan pemberitahuan penapisan:

@Configuration public class NotifierConfiguration { private final InstanceRepository repository; private final ObjectProvider
    
      otherNotifiers; public NotifierConfiguration(InstanceRepository repository, ObjectProvider
     
       otherNotifiers) { this.repository = repository; this.otherNotifiers = otherNotifiers; } @Bean public FilteringNotifier filteringNotifier() { CompositeNotifier delegate = new CompositeNotifier(this.otherNotifiers.getIfAvailable(Collections::emptyList)); return new FilteringNotifier(delegate, this.repository); } @Bean public LoggingNotifier notifier() { return new LoggingNotifier(repository); } @Primary @Bean(initMethod = "start", destroyMethod = "stop") public RemindingNotifier remindingNotifier() { RemindingNotifier remindingNotifier = new RemindingNotifier(filteringNotifier(), repository); remindingNotifier.setReminderPeriod(Duration.ofMinutes(5)); remindingNotifier.setCheckReminderInverval(Duration.ofSeconds(60)); return remindingNotifier; } }
     
    

7. Kesimpulannya

Tutorial pengenalan ini merangkumi langkah-langkah mudah yang harus dilakukan seseorang, untuk memantau dan mengurus aplikasi Spring Bootnya dengan menggunakan Spring Boot Admin.

Konfigurasi automatik membolehkan kita menambahkan hanya beberapa konfigurasi kecil dan pada akhirnya, untuk mempunyai pelayan pentadbir yang berfungsi sepenuhnya.

Seperti biasa, contoh kod panduan ini boleh didapati di Github.