Vodič za administratora proljetnog pokretanja

1. Pregled

Spring Boot Admin je web aplikacija koja se koristi za upravljanje i nadzor aplikacija Spring Boot. Svaka se aplikacija smatra klijentom i registrira se na administratorskom poslužitelju. Iza kulisa čaroliju daju krajnje točke Spring Boot Actuator.

U ovom ćemo članku opisati korake za konfiguriranje poslužitelja Spring Boot Admin i kako aplikacija postaje klijent.

2. Administratorsko postavljanje poslužitelja

Prije svega, moramo stvoriti jednostavnu web aplikaciju Spring Boot, a također dodati i sljedeću Mavenovu ovisnost:

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

Nakon ovoga, @EnableAdminServer bit će dostupan, pa ćemo ga dodati glavnoj klasi, kao što je prikazano u primjeru dolje:

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

U ovom smo trenutku spremni za pokretanje poslužitelja i registraciju klijentskih aplikacija.

3. Postavljanje klijenta

Sada, nakon što smo postavili naš administratorski poslužitelj, možemo registrirati svoju prvu aplikaciju Spring Boot kao klijent. Moramo dodati sljedeću Mavenovu ovisnost:

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

Dalje, moramo konfigurirati klijenta da zna o osnovnom URL-u administrativnog poslužitelja. Da bi se to dogodilo, samo dodajemo sljedeće svojstvo:

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

Počevši od Spring Boot 2, krajnje točke osim zdravlje i info nisu izloženi prema zadanim postavkama.

Izložimo sve krajnje točke:

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

4. Konfiguracija sigurnosti

Poslužitelj Spring Boot Admin ima pristup osjetljivim krajnjim točkama aplikacije, dakle savjetuje se da dodamo neku sigurnosnu konfiguraciju i aplikaciji administratora i klijenta.

Isprva ćemo se usredotočiti na konfiguriranje sigurnosti administratorskog poslužitelja. Moramo dodati sljedeće Mavenove ovisnosti:

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

To će omogućiti sigurnost i dodati administratorsko sučelje za prijavu.

Zatim ćemo dodati klasu sigurnosne konfiguracije kao što možete vidjeti u nastavku:

@Configuration javna klasa WebSecurityConfig proširuje WebSecurityConfigurerAdapter {privatni konačni AdminServerProperties adminServer; javna WebSecurityConfig (AdminServerProperties adminServer) {this.adminServer = adminServer; } @Override zaštićena void konfiguracija (HttpSecurity http) baca izuzetak {SavedRequestAwareAuthenticationSuccessHandler successHandler = novo SavedRequestAwareAuthenticationSuccessHandler (); successHandler.setTargetUrlParameter ("redirectTo"); successHandler.setDefaultTargetUrl (this.adminServer.getContextPath () + "/"); http .authorizeRequests () .antMatchers (this.adminServer.getContextPath () + "/ imovina / **"). allowAll () .antMatchers (this.adminServer.getContextPath () + "/ login"). allowAll () .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 AntPathRequestMatter (New AntPathRequestMatter (New AntPathRequestMatcher (New AntPathRequestMatcher (New AntPathRequestMatcher instance ", HttpMethod.POST.toString ()), novi AntPathRequestMatcher (this.adminServer.getContextPath () +" / instances / * ", HttpMethod.DELETE.toString ()), novi AntPathRequestMatcher (this.adminServer.getContext + "/ aktuator / **")) .and () .rememberMe () .key (UUID.randomUUID (). toString ()) .tokenValiditySeconds (1209600); }}

Postoji jednostavna sigurnosna konfiguracija, ali nakon dodavanja primijetit ćemo da se klijent više ne može registrirati na poslužitelju.

Da bismo registrirali klijenta na novoosigurani poslužitelj, moramo dodati još neke konfiguracije u datoteku svojstava klijenta:

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

Nalazimo se na mjestu gdje smo osigurali naš administratorski poslužitelj. U proizvodnom sustavu, naravno, aplikacije koje pokušavamo nadgledati bit će zaštićene. Dakle, klijentu ćemo dodati i sigurnost - a u korisničkom sučelju administrativnog poslužitelja primijetit ćemo da podaci o klijentu više nisu dostupni.

Moramo dodati neke metapodatke koje ćemo poslati na administratorski poslužitelj. Ove podatke poslužitelj koristi za povezivanje s krajnjim točkama klijenta:

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

Slanje vjerodajnica putem HTTP-a, naravno, nije sigurno - pa komunikacija mora ići preko HTTPS-a.

5. Značajke praćenja i upravljanja

Spring Boot Admin može se konfigurirati tako da prikazuje samo one informacije koje smatramo korisnima. Samo moramo izmijeniti zadanu konfiguraciju i dodati vlastite potrebne mjerne podatke:

spring.boot.admin.routes.endpoints = env, metrika, trag, jolokia, informacije, configprops

Kako idemo dalje, vidjet ćemo da postoje neke druge značajke koje se mogu istražiti. Razgovaramo o tome Upravljanje grahom JMX koristeći Jolokija I također Loglevel upravljanje.

Spring Boot Admin također podržava replikaciju klastera pomoću Hazelcast-a. Samo moramo dodati sljedeću Mavenovu ovisnost i pustiti da autokonfiguracija učini sve ostalo:

 com.hazelcast lješnjak 3.12.2 

Ako želimo trajnu instancu Hazelcast-a, koristit ćemo prilagođenu konfiguraciju:

@Configuration javna klasa HazelcastConfig {@Bean public Config hazelcast () {MapConfig eventStoreMap = new MapConfig ("spring-boot-admin-event-store") .setInMemoryFormat (InMemoryFormat.OBJECT) .setBackupCount (1) .setEvictionPolicy .setEvictionPolicy. ) .setMergePolicyConfig (novo MergePolicyConfig (PutIfAbsentMapMergePolicy.class.getName (), 100)); MapConfig sentNotificationsMap = Novi MapConfig ( "proljeće-boot-admin-primjena-trgovina") .setInMemoryFormat (InMemoryFormat.OBJECT) .setBackupCount (1) .setEvictionPolicy (EvictionPolicy.LRU) .setMergePolicyConfig (novi MergePolicyConfig (PutIfAbsentMapMergePolicy.class.getName () , 100)); Config config = novi 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")); povratak config; }}

6. Obavijesti

Dalje, razgovarajmo o mogućnosti primanja obavijesti s administratorskog poslužitelja ako se nešto dogodi s našim registriranim klijentom. Sljedeći su obavijesti dostupni za konfiguraciju:

  • E-mail
  • PagerDuty
  • OpsGenie
  • Hipchat
  • Zatišje
  • Razgovarajmo

6.1. Obavijesti e-poštom

Prvo ćemo se usredotočiti na konfiguriranje obavijesti o pošti za naš administratorski poslužitelj. Da bi se to dogodilo, moramo dodati ovisnost o pokretaču pošte kao što je prikazano dolje:

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

Nakon ovoga moramo dodati neku konfiguraciju pošte:

spring.mail.host = smtp.example.com spring.mail.username = smtp_user spring.mail.password = smtp_password [e-pošta zaštićena]

Sada, kad god naš registrirani klijent promijeni svoj status iz GORE u OFFLINE ili na neki drugi način, na gore navedenu adresu šalje se e-pošta. Za ostale je obavijesti konfiguracija slična.

6.2. Hipchat obavijesti

Kao što ćemo vidjeti, integracija s Hipchatom prilično je jednostavna; potrebno je postaviti samo nekoliko obaveznih svojstava:

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

Nakon što smo ih definirali, primijetit ćemo u sobi Hipchat da primamo obavijesti kad god se promijeni status klijenta.

6.3. Prilagođena konfiguracija obavijesti

Možemo konfigurirati prilagođeni sustav obavijesti koji za to ima na raspolaganju neke moćne alate. Možemo koristiti a podsjetnik koji podsjeća za slanje zakazanog obavještenja dok se status klijenta ne promijeni.

Ili možda želimo poslati obavijesti filtriranom skupu klijenata. Za to možemo koristiti a obavijest o filtriranju:

@Configuration javna klasa NotifierConfiguration {privatni konačni repozitorij InstanceRepository; privatni konačni ObjectProvider ostaliNotifikatori; javna NotifierConfiguration (spremište InstanceRepository, ObjectProvider otherNotifiers) {this.repository = spremište; this.otherNotifiers = ostaliNotifikatori; } @Bean public FilteringNotifier filteringNotifier () {CompositeNotifier delegate = new CompositeNotifier (this.otherNotifiers.getIfAvailable (Collections :: emptyList)); vrati novi FilteringNotifier (delegat, this.repository); } @Bean public LoggingNotifier notifier () {return new LoggingNotifier (repozitorij); } @Primary @Bean (initMethod = "start", killMethod = "stop") javni RemindingNotifier podsjetnikNotifier () {RemindingNotifier podsjetnikNotifier = novi RemindingNotifier (filteringNotifier (), spremište); podsjećanjeNotifier.setReminderPeriod (Duration.ofMinutes (5)); podsjećanjeNotifier.setCheckReminderInverval (Duration.ofSeconds (60)); vratiti podsjetnikNotifier; }}

7. Zaključak

Ovaj uvodni vodič pokriva jednostavne korake koje treba učiniti kako bi se nadziralo i upravljalo njegovim Spring Boot aplikacijama pomoću Spring Boot Admin.

Automatska konfiguracija dopušta nam dodavanje samo nekih manjih konfiguracija i na kraju, da imamo potpuno radni administratorski poslužitelj.

Kao i uvijek, uzorak koda ovog vodiča možete pronaći na Githubu.