En guide til Spring Boot Admin

1. Oversigt

Spring Boot Admin er en webapplikation, der bruges til at styre og overvåge Spring Boot-applikationer. Hver applikation betragtes som en klient og registreres på admin-serveren. Bag kulisserne gives magien af ​​Spring Boot Actuator-slutpunkterne.

I denne artikel vil vi beskrive trin til konfiguration af en Spring Boot Admin-server, og hvordan et program bliver en klient.

2. Admin-serveropsætning

Først og fremmest skal vi oprette en simpel Spring Boot-webapplikation og også tilføje følgende Maven-afhængighed:

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

Efter dette, @EnableAdminServer vil være tilgængelig, så vi tilføjer det 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 tidspunkt er vi klar til at starte serveren og registrere klientapplikationer.

3. Opsætning af en klient

Nu, efter at vi har oprettet vores admin-server, kan vi registrere vores første Spring Boot-applikation som klient. Vi skal tilføje følgende Maven-afhængighed:

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

Dernæst er vi nødt til at konfigurere klienten til at kende til admin-serverens basis-URL. For at dette kan ske, tilføjer vi bare følgende egenskab:

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

Startende med Spring Boot 2, andre slutpunkter end sundhed og info er ikke eksponeret som standard.

Lad os udsætte alle slutpunkter:

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

4. Sikkerhedskonfiguration

Spring Boot Admin-serveren har adgang til programmets følsomme slutpunkter, så det tilrådes, at vi tilføjer en vis sikkerhedskonfiguration til både admin og klientapplikation.

Først vil vi fokusere på at konfigurere admin-serverens sikkerhed. Vi skal tilføje følgende Maven-afhængigheder:

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

Dette muliggør sikkerhed og tilføjer en login-grænseflade til admin-applikationen.

Dernæst tilføjer vi en sikkerhedskonfigurationsklasse som du kan se nedenfor:

@Configuration offentlig klasse WebSecurityConfig udvider WebSecurityConfigurerAdapter {private final AdminServerProperties adminServer; offentlig WebSecurityConfig (AdminServerProperties adminServer) {this.adminServer = adminServer; } @ Override beskyttet ugyldig konfiguration (HttpSecurity http) kaster Undtagelse {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") .and () .httpBasic () .and () .csrf () .csrfTokenRepository (CookieCsrfTokenRepository.withHttpOnlyFalse ()) .ignoringRequestMatchers (new AntPathRequestMatchServer) (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); }}

Der er en simpel sikkerhedskonfiguration, men efter tilføjelse af den bemærker vi, at klienten ikke længere kan registrere sig på serveren.

For at registrere klienten til den nyligt beskyttede server, skal vi tilføje mere konfiguration i klientens ejendomsfil:

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

Vi er ved det punkt, hvor vi sikrede vores admin-server. I et produktionssystem vil de applikationer, vi prøver at overvåge, naturligvis blive sikret. Så vi tilføjer også sikkerhed til klienten - og vi bemærker i UI-grænsefladen på admin-serveren, at klientoplysningerne ikke længere er tilgængelige.

Vi er nødt til at tilføje nogle metadata, som vi sender til admin-serveren. Disse oplysninger bruges af serveren til at oprette forbindelse til klientens slutpunkter:

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}

At sende legitimationsoplysninger via HTTP er selvfølgelig ikke sikkert - så kommunikationen skal gå over HTTPS.

5. Overvågnings- og styringsfunktioner

Spring Boot Admin kan konfigureres til kun at vise de oplysninger, som vi anser for nyttige. Vi skal bare ændre standardkonfigurationen og tilføje vores egne nødvendige metrics:

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

Når vi går videre, ser vi, at der er nogle andre funktioner, der kan udforskes. Vi taler om JMX bønnestyring ved brug af Jolokia og også Loglevel ledelse.

Spring Boot Admin understøtter også klyngereplikering ved hjælp af Hazelcast. Vi skal bare tilføje følgende Maven-afhængighed og lade autokonfigurationen gøre resten:

 com.hazelcast hazelcast 3.12.2 

Hvis vi vil have en vedvarende forekomst af Hazelcast, skal vi bruge en brugerdefineret konfiguration:

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

6. Meddelelser

Lad os derefter diskutere muligheden for at modtage underretninger fra admin-serveren, hvis der sker noget med vores registrerede klient. Følgende notifikatorer er tilgængelige til konfiguration:

  • E-mail
  • PagerDuty
  • OpsGenie
  • Hipchat
  • Slap
  • Lad os snakke

6.1. E-mail-underretninger

Vi fokuserer først på konfiguration af mailunderretninger til vores admin-server. For at dette kan ske, skal vi tilføje afhængigheden af ​​mailstarter som vist nedenfor:

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

Herefter skal vi tilføje nogle mailkonfigurationer:

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

Nu, hver gang vores registrerede klient ændrer sin status fra UP til OFFLINE eller på anden måde, sendes en e-mail til den adresse, der er konfigureret ovenfor. For de andre meddelere er konfigurationen ens.

6.2. Hipchat-meddelelser

Som vi får se, er integrationen med Hipchat ret ligetil; der er kun få obligatoriske egenskaber at indstille:

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 disse er defineret, bemærker vi i Hipchat-rummet, at vi modtager underretninger, når klientens status ændres.

6.3. Konfiguration af tilpassede meddelelser

Vi kan konfigurere et brugerdefineret meddelelsessystem, der har nogle effektive værktøjer til dette. Vi kan bruge en påmindende anmelder at sende en planlagt meddelelse, indtil klientens status ændres.

Eller måske vil vi sende underretninger til et filtreret sæt klienter. Til dette kan vi bruge en filtreringsmeddelelse:

@Configuration public class NotifierConfiguration {private final InstanceRepository repository; privat endelig ObjectProvider andreBemærkere; 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 (deleger, this.repository); } @Bean public LoggingNotifier notifier () {returner ny 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)); tilbagevendende påmindelseNotifier; }}

7. Konklusion

Denne introduktionsvejledning dækker de enkle trin, man skal gøre for at overvåge og administrere sine Spring Boot-applikationer ved hjælp af Spring Boot Admin.

Autokonfigurationen tillader os kun at tilføje nogle mindre konfigurationer og i slutningen have en fuldt fungerende admin-server.

Og som altid kan eksemplet på denne vejledning findes på Github.