Een gids voor Spring Boot Admin

1. Overzicht

Spring Boot Admin is een webapplicatie die wordt gebruikt voor het beheren en bewaken van Spring Boot-applicaties. Elke applicatie wordt beschouwd als een client en wordt geregistreerd op de admin-server. Achter de schermen wordt de magie gegeven door de Spring Boot Actuator-eindpunten.

In dit artikel gaan we stappen beschrijven voor het configureren van een Spring Boot Admin-server en hoe een applicatie een client wordt.

2. Admin Server instellen

Allereerst moeten we een eenvoudige Spring Boot-webtoepassing maken en ook de volgende Maven-afhankelijkheid toevoegen:

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

Hierna is het @EnableAdminServer zal beschikbaar zijn, dus we zullen het toevoegen aan de hoofdklasse, zoals weergegeven in het onderstaande voorbeeld:

@EnableAdminServer @SpringBootApplication openbare klasse SpringBootAdminServerApplication {openbare statische leegte hoofd (String [] args) {SpringApplication.run (SpringBootAdminServerApplication.class, args); }}

Op dit punt zijn we klaar om de server te starten en clienttoepassingen te registreren.

3. Opzetten van een klant

Nu, nadat we onze admin-server hebben ingesteld, kunnen we onze eerste Spring Boot-applicatie als client registreren. We moeten de volgende Maven-afhankelijkheid toevoegen:

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

Vervolgens moeten we de client configureren om op de hoogte te zijn van de basis-URL van de admin-server. Om dit te laten gebeuren, voegen we gewoon de volgende eigenschap toe:

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

Beginnend met Spring Boot 2, andere eindpunten dan Gezondheid en info worden niet standaard weergegeven.

Laten we alle eindpunten blootleggen:

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

4. Beveiligingsconfiguratie

De Spring Boot Admin-server heeft toegang tot de gevoelige endpoints van de applicatie, dus het wordt aangeraden dat we een aantal beveiligingsconfiguraties toevoegen aan zowel de admin- als de clienttoepassing.

In eerste instantie zullen we ons concentreren op het configureren van de beveiliging van de admin-server. We moeten de volgende Maven-afhankelijkheden toevoegen:

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

Dit zal de beveiliging inschakelen en een login-interface toevoegen aan de admin-applicatie.

Vervolgens voegen we een beveiligingsconfiguratieklasse toe, zoals u hieronder kunt zien:

@Configuration openbare klasse WebSecurityConfig breidt WebSecurityConfigurerAdapter uit {privé laatste AdminServerProperties adminServer; openbare WebSecurityConfig (AdminServerProperties adminServer) {this.adminServer = adminServer; } @Override protected void configure (HttpSecurity http) genereert uitzondering {SavedRequestAwareAuthenticationSuccessHandler successHandler = nieuw SavedRequestAwareAuthenticationSuccessHandler (); successHandler.setTargetUrlParameter ("redirectTo"); successHandler.setDefaultTargetUrl (this.adminServer.getContextPath () + "/"); http .authorizeRequests () .antMatchers (this.adminServer.getContextPath () + "/ assets / **"). allowAll () .antMatchers (this.adminServer.getContextPath () + "/ login"). allowAll () .anyRequest () .authenticated () .and () .formLogin () .loginPage (this.adminServer.getContextPath () + "/ login") .successHandler (successHandler) .en () .logout () .logoutUrl (this.adminServer. getContextPath () + "/ logout") .and () .httpBasic (). en () .csrf () .csrfTokenRepository (CookieCsrfTokenRepository.withHttpOnlyFalse ()) .ignoringRequestMatchers (nieuwe AntPathgetRequestMatchers (nieuwe AntPathgetCequestMatch instances ", HttpMethod.POST.toString ()), nieuwe AntPathRequestMatcher (this.adminServer.getContextPath () +" / instances / * ", HttpMethod.DELETE.toString ()), nieuwe AntPathRequestMatcher (this.adminServer.getCon "/ actuator / **")) .en () .rememberMe () .key (UUID.randomUUID (). toString ()) .tokenValiditySeconds (1209600); }}

Er is een eenvoudige beveiligingsconfiguratie, maar nadat we deze hebben toegevoegd, zullen we merken dat de client zich niet meer op de server kan registreren.

Om de client op de nieuw beveiligde server te registreren, moeten we wat meer configuratie toevoegen aan het eigenschappenbestand van de client:

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

We zijn op het punt waar we onze admin-server hebben beveiligd. In een productiesysteem worden de applicaties die we proberen te monitoren natuurlijk beveiligd. We voegen dus ook beveiliging toe aan de client - en we zullen in de gebruikersinterface van de admin-server zien dat de clientinformatie niet meer beschikbaar is.

We moeten wat metadata toevoegen die we naar de admin-server zullen sturen. Deze informatie wordt door de server gebruikt om verbinding te maken met de eindpunten van de klant:

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}

Het verzenden van inloggegevens via HTTP is natuurlijk niet veilig - dus de communicatie moet via HTTPS verlopen.

5. Controle en beheerfuncties

Spring Boot Admin kan worden geconfigureerd om alleen de informatie weer te geven die wij nuttig achten. We hoeven alleen de standaardconfiguratie te wijzigen en onze eigen benodigde statistieken toe te voegen:

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

Naarmate we verder gaan, zullen we zien dat er enkele andere functies zijn die kunnen worden onderzocht. We praten over Beheer van JMX-bonen gebruik makend van Jolokia en ook Log niveau beheer.

Spring Boot Admin ondersteunt ook clusterreplicatie met Hazelcast. We hoeven alleen de volgende Maven-afhankelijkheid toe te voegen en de autoconfiguratie de rest te laten doen:

 com.hazelcast hazelcast 3.12.2 

Als we een blijvend exemplaar van Hazelcast willen, gaan we een aangepaste configuratie gebruiken:

@Configuratie openbare klasse HazelcastConfig {@Bean openbare Config hazelcast () {MapConfig eventStoreMap = nieuwe MapConfig ("spring-boot-admin-event-store") .setInMemoryFormat (InMemoryFormat.OBJECT) .setBackupCount (1) .setEvictionPolicy (1) .setEvictionPolicy (1) .setEvictionPolicy ) .setMergePolicyConfig (nieuwe MergePolicyConfig (PutIfAbsentMapMergePolicy.class.getName (), 100)); MapConfig sentNotificationsMap = nieuw MapConfig ("spring-boot-admin-application-store") .setInMemoryFormat (InMemoryFormat.OBJECT) .setBackupCount (1) .setEvictionPolicy (EvictionPolicy.LRU) .setMergePolicyConfigIf (nieuw MergePolicyConfig). , 100)); Config config = nieuwe 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. Meldingen

Laten we vervolgens de mogelijkheid bespreken om meldingen van de admin-server te ontvangen als er iets gebeurt met onze geregistreerde client. De volgende melders zijn beschikbaar voor configuratie:

  • E-mail
  • PagerDuty
  • OpsGenie
  • Hipchat
  • Slap
  • Laten we chatten

6.1. E-mail notificaties

We zullen ons eerst concentreren op het configureren van e-mailmeldingen voor onze admin-server. Om dit te laten gebeuren, moeten we de afhankelijkheid van de e-mailstarter toevoegen, zoals hieronder wordt weergegeven:

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

Hierna moeten we een e-mailconfiguratie toevoegen:

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

Nu, wanneer onze geregistreerde klant zijn status verandert van UP naar OFFLINE of anderszins, wordt een e-mail verzonden naar het hierboven geconfigureerde adres. Voor de andere melders is de configuratie vergelijkbaar.

6.2. Hipchat-meldingen

Zoals we zullen zien, is de integratie met Hipchat vrij eenvoudig; er zijn slechts een paar verplichte eigenschappen om in te stellen:

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

Nadat deze zijn gedefinieerd, zullen we in de Hipchat-ruimte zien dat we meldingen ontvangen wanneer de status van de klant verandert.

6.3. Aangepaste meldingsconfiguratie

We kunnen een aangepast meldingssysteem configureren met enkele krachtige tools hiervoor. We kunnen een herinneren kennisgever om een ​​geplande melding te verzenden totdat de status van de klant verandert.

Of misschien willen we meldingen sturen naar een gefilterde set klanten. Hiervoor kunnen we een filtermelder:

@Configuration openbare klasse NotifierConfiguration {privé definitieve InstanceRepository-repository; private finale ObjectProvider otherNotifiers; openbare NotifierConfiguration (InstanceRepository-opslagplaats, ObjectProvider otherNotifiers) {this.repository = repository; this.otherNotifiers = otherNotifiers; } @Bean openbare FilteringNotifier filteringNotifier () {CompositeNotifier gedelegeerde = nieuwe CompositeNotifier (this.otherNotifiers.getIfAvailable (Collections :: emptyList)); retourneer nieuwe FilteringNotifier (gemachtigde, this.repository); } @Bean public LoggingNotifier notifier () {retourneer nieuwe LoggingNotifier (repository); } @Primary @Bean (initMethod = "start", destroyMethod = "stop") openbaar RemindingNotifier remindingNotifier () {RemindingNotifier remindingNotifier = nieuw RemindingNotifier (filteringNotifier (), repository); remindingNotifier.setReminderPeriod (Duration.ofMinutes (5)); remindingNotifier.setCheckReminderInverval (Duration.ofSeconds (60)); terugkeer remindingNotifier; }}

7. Conclusie

Deze intro-tutorial behandelt de eenvoudige stappen die men moet doen om zijn Spring Boot-applicaties te bewaken en te beheren met Spring Boot Admin.

De autoconfiguratie stelt ons in staat om slechts enkele kleine configuraties toe te voegen en uiteindelijk een volledig werkende admin-server te hebben.

En, zoals altijd, is de voorbeeldcode van deze gids te vinden op Github.