En guide til Spring Boot Admin

1. Oversikt

Spring Boot Admin er en webapplikasjon som brukes til å administrere og overvåke Spring Boot-applikasjoner. Hver applikasjon betraktes som en klient og registreres på administrasjonsserveren. Bak kulissene blir magien gitt av endepunktene på vårstøvleren.

I denne artikkelen skal vi beskrive trinn for å konfigurere en Spring Boot Admin-server og hvordan et program blir en klient.

2. Administrasjon av serveroppsett

Først og fremst må vi lage en enkel Spring Boot-webapplikasjon og også legge til følgende Maven-avhengighet:

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

Etter dette, @EnableAdminServer vil være tilgjengelig, så vi legger den til hovedklassen, som vist i eksemplet nedenfor:

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

På dette tidspunktet er vi klare til å starte serveren og registrere klientapplikasjoner.

3. Sette opp en klient

Nå, etter at vi har konfigurert admin-serveren vår, kan vi registrere vår første Spring Boot-applikasjon som klient. Vi må legge til følgende Maven-avhengighet:

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

Deretter må vi konfigurere klienten til å vite om admin-serverens basis-URL. For at dette skal skje, legger vi bare til følgende egenskap:

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

Starter med Spring Boot 2, andre endepunkter enn Helse og info er ikke eksponert som standard.

La oss avsløre alle sluttpunktene:

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

4. Sikkerhetskonfigurasjon

Spring Boot Admin-serveren har tilgang til applikasjonens sensitive sluttpunkter, så det anbefales at vi legger til noen sikkerhetskonfigurasjoner i både admin og klientapplikasjon.

Først vil vi fokusere på å konfigurere admin-serverens sikkerhet. Vi må legge til følgende Maven-avhengigheter:

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

Dette vil muliggjøre sikkerhet og legge til et påloggingsgrensesnitt til admin-applikasjonen.

Deretter legger vi til en sikkerhetskonfigurasjonsklasse som du kan se nedenfor:

@Configuration offentlig klasse WebSecurityConfig utvider WebSecurityConfigurerAdapter {private final AdminServerProperties adminServer; offentlig WebSecurityConfig (AdminServerProperties adminServer) {this.adminServer = adminServer; } @ Override-beskyttet ugyldig konfigurasjon (HttpSecurity http) kaster Unntak {SavedRequestAwareAuthenticationSuccessHandler successHandler = ny 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"). og () .httpBasic () .and () .csrf () .csrfTokenRepository (CookieCsrfTokenRepository.withHttpOnlyFalse ()) .ignoringRequestMatchers (new AntPathRequestonatchSatcher (this) instances ", HttpMethod.POST.toString ()), new AntPathRequestMatcher (this.adminServer.getContextPath () +" / instances / * ", HttpMethod.DELETE.toString ()), new AntPathRequestMatcher (this.adminServer.getContextPath "/ aktuator / **")). og () .rememberMe () .key (UUID.randomUUID (). toString ()) .tokenValiditySeconds (1209600); }}

Det er en enkel sikkerhetskonfigurasjon, men etter å ha lagt til den, vil vi legge merke til at klienten ikke kan registrere seg på serveren lenger.

For å registrere klienten til den nylig sikrede serveren, må vi legge til litt mer konfigurasjon i klientens eiendomsfil:

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

Vi er på det punktet hvor vi sikret admin-serveren vår. I et produksjonssystem vil naturligvis applikasjonene vi prøver å overvåke være sikret. Så vi vil også legge til sikkerhet for klienten - og vi vil legge merke til i grensesnittet til administrasjonsserveren at klientinformasjonen ikke lenger er tilgjengelig.

Vi må legge til noen metadata som vi sender til administrasjonsserveren. Denne informasjonen brukes av serveren til å koble til klientens sluttpunkter:

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}

Å sende legitimasjon via HTTP er selvfølgelig ikke trygt - så kommunikasjonen må gå over HTTPS.

5. Overvåking og styringsfunksjoner

Spring Boot Admin kan konfigureres til å bare vise informasjonen vi anser som nyttig. Vi må bare endre standardkonfigurasjonen og legge til våre egne beregninger:

spring.boot.admin.routes.endpoints = env, beregninger, spor, jolokia, info, configprops

Når vi går videre, ser vi at det er noen andre funksjoner som kan utforskes. Vi snakker om JMX bønnehåndtering ved hjelp av Jolokia og også Loglevel ledelse.

Spring Boot Admin støtter også klyngereplikering ved hjelp av Hazelcast. Vi må bare legge til følgende Maven-avhengighet og la autokonfigurasjonen gjøre resten:

 com.hazelcast hazelcast 3.12.2 

Hvis vi vil ha en vedvarende forekomst av Hazelcast, skal vi bruke en tilpasset konfigurasjon:

@Configuration public class HazelcastConfig {@Bean public Config hazelcast () {MapConfig eventStoreMap = new MapConfig ("spring-boot-admin-event-store") .setInMemoryFormat (InMemoryFormat.OBJECT) .setBackupCount (1) .setEvictionPolicy (Ev. ) .setMergePolicyConfig (ny MergePolicyConfig (PutIfAbsentMapMergePolicy.class.getName (), 100)); MapConfig sentNotificationsMap = ny MapConfig ("spring-boot-admin-application-store") .setInMemoryFormat (InMemoryFormat.OBJECT) .setBackupCount (1) .setEvictionPolicy (EvictionPolicy.LRU) .setMergePolicyConfig (new MergePolicy) , 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")); returkonfigurasjon; }}

6. Varsler

Deretter, la oss diskutere muligheten for å motta varsler fra administrasjonsserveren hvis noe skjer med den registrerte klienten vår. Følgende varslere er tilgjengelige for konfigurasjon:

  • E-post
  • PagerDuty
  • OpsGenie
  • Hipchat
  • Slakk
  • La oss snakke

6.1. E-postvarsler

Vi vil først fokusere på å konfigurere e-postvarsler for admin-serveren vår. For at dette skal skje, må vi legge til avhengighet av e-poststarter som vist nedenfor:

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

Etter dette må vi legge til litt e-postkonfigurasjon:

spring.mail.host = smtp.example.com spring.mail.username = smtp_user spring.mail.password = smtp_password [e-postbeskyttet]

Hver gang vår registrerte klient endrer status fra UP til OFFLINE eller på annen måte, sendes en e-post til adressen som er konfigurert ovenfor. For de andre varslerne er konfigurasjonen lik.

6.2. Hipchat-varsler

Som vi får se er integrasjonen med Hipchat ganske grei; det er bare noen få obligatoriske egenskaper å angi:

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

Når vi har definert disse, vil vi legge merke til i Hipchat-rommet at vi mottar varsler når statusen til klienten endres.

6.3. Tilpasset varslingskonfigurasjon

Vi kan konfigurere et tilpasset varslingssystem som har kraftige verktøy for dette. Vi kan bruke en påminnelsesvarsler å sende et planlagt varsel til klientens status endres.

Eller kanskje vi vil sende varsler til et filtrert sett med klienter. For dette kan vi bruke en filtreringsvarsler:

@Configuration public class NotifierConfiguration {private final InstanceRepository repository; privat endelig ObjectProvider andreVarslere; 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)); returner ny FilteringNotifier (delegat, this.repository); } @Bean public LoggingNotifier notifier () {return new LoggingNotifier (repository); } @Primary @Bean (initMethod = "start", destroyMethod = "stop") offentlig RemindingNotifier remindingNotifier () {RemindingNotifier remindingNotifier = ny RemindingNotifier (filteringNotifier (), repository); remindingNotifier.setReminderPeriod (Duration.ofMinutes (5)); remindingNotifier.setCheckReminderInverval (Duration.ofSeconds (60)); return reminningNotifier; }}

7. Konklusjon

Denne introveiledningen dekker de enkle trinnene man må gjøre for å overvåke og administrere Spring Boot-applikasjonene sine ved hjelp av Spring Boot Admin.

Autokonfigurasjonen tillater oss å legge til bare noen mindre konfigurasjoner, og til slutt har vi en fullt fungerende admin-server.

Og som alltid kan eksemplet på denne guiden finnes på Github.