Sprievodca správcom Spring Boot

1. Prehľad

Spring Boot Admin je webová aplikácia, ktorá sa používa na správu a monitorovanie aplikácií Spring Boot. Každá aplikácia sa považuje za klienta a zaregistruje sa na serveri správcu. V zákulisí je kúzlo dané koncovými bodmi ovládača Spring Boot Actuator.

V tomto článku si popíšeme kroky na konfiguráciu servera Spring Boot Admin a to, ako sa z aplikácie stane klient.

2. Nastavenie správcovského servera

Najskôr musíme vytvoriť jednoduchú webovú aplikáciu Spring Boot a tiež pridať nasledujúcu závislosť Maven:

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

Po tomto @EnableAdminServer bude k dispozícii, takže ju pridáme do hlavnej triedy, ako je to znázornené v príklade nižšie:

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

V tejto chvíli sme pripravení spustiť server a zaregistrovať klientske aplikácie.

3. Nastavenie klienta

Teraz, keď nastavíme náš server pre správu, môžeme zaregistrovať našu prvú aplikáciu Spring Boot ako klient. Musíme pridať nasledujúcu závislosť Maven:

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

Ďalej musíme klienta nakonfigurovať, aby vedel o základnej adrese URL servera správcu. Aby sa tak stalo, pridáme iba nasledujúcu vlastnosť:

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

Počnúc Spring Boot 2, iné koncové body ako zdravie a Info nie sú štandardne vystavené.

Vystavme všetky koncové body:

management.endpoints.web.exposure.include = * management.endpoint.health.show-details = vždy

4. Konfigurácia zabezpečenia

Server Spring Boot Admin má prístup k citlivým koncovým bodom aplikácie, takže Odporúča sa pridať určitú konfiguráciu zabezpečenia do administrátorskej aj klientskej aplikácie.

Najskôr sa zameriame na konfiguráciu zabezpečenia servera správcu. Musíme pridať nasledujúce závislosti Maven:

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

Umožní to zabezpečenie a do aplikácie pre správu sa pridá prihlasovacie rozhranie.

Ďalej pridáme triedu konfigurácie zabezpečenia, ako vidíte nižšie:

@Configuration verejná trieda WebSecurityConfig rozširuje WebSecurityConfigurerAdapter {private final AdminServerProperties adminServer; public WebSecurityConfig (AdminServerProperties adminServer) {this.adminServer = adminServer; } @Override protected void configure (HttpSecurity http) vyvolá výnimku {SavedRequestAwareAuthenticationSuccessHandler successHandler = nový 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 (nový AntPathRequestMatcher (this). inštancie ", HttpMethod.POST.toString ()), nový AntPathRequestMatcher (this.adminServer.getContextPath () +" / inštancie / * ", HttpMethod.DELETE.toString ()), nový AntPathRequestMatcher (this.adminServer.getContext) "/ aktuátor / **")). a () .rememberMe () .key (UUID.randomUUID (). toString ()) .tokenValiditySeconds (1209600); }}

Existuje jednoduchá konfigurácia zabezpečenia, ale po jej pridaní si všimneme, že sa klient už na server nemôže zaregistrovať.

Aby sme mohli klienta zaregistrovať na novo zabezpečený server, musíme do súboru vlastností klienta pridať ďalšiu konfiguráciu:

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

Sme v bode, kde sme zabezpečili náš administrátorský server. Vo výrobnom systéme budú aplikácie, ktoré sa snažíme monitorovať, prirodzene zabezpečené. Takže pridáme zabezpečenie aj klientovi - a v používateľskom rozhraní servera správcu si všimneme, že informácie o klientovi už nie sú k dispozícii.

Musíme pridať nejaké metadáta, ktoré pošleme na server správcu. Tieto informácie server používa na pripojenie k koncovým bodom klienta:

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

Posielanie poverení cez HTTP nie je samozrejme bezpečné, takže komunikácia musí prebiehať cez HTTPS.

5. Monitorovacie a riadiace funkcie

Správcu Spring Boot možno nakonfigurovať tak, aby zobrazoval iba informácie, ktoré považujeme za užitočné. Musíme len zmeniť predvolenú konfiguráciu a pridať vlastné potrebné metriky:

spring.boot.admin.routes.endpoints = env, metriky, trasovanie, jolokia, informácie, configprops

Ako pôjdeme ďalej, uvidíme, že existuje niekoľko ďalších funkcií, ktoré je možné preskúmať. Hovoríme o Správa fazule JMX použitím Jolokia a tiež Loglevel zvládanie.

Spring Boot Admin tiež podporuje replikáciu klastrov pomocou Hazelcastu. Musíme pridať nasledujúcu závislosť Maven a o zvyšok sa postarať automatická konfigurácia:

 com.hazelcast hazelcast 3.12.2 

Ak chceme pretrvávajúcu inštanciu Hazelcastu, použijeme vlastnú konfiguráciu:

@Configuration verejná trieda HazelcastConfig {@Bean public Config hazelcast () {MapConfig eventStoreMap = nový MapConfig ("spring-boot-admin-event-store") .setInMemoryFormat (InMemoryFormat.OBJECT) .setBackupCount (1) .setEvictionPolicy ) .setMergePolicyConfig (nový MergePolicyConfig (PutIfAbsentMapMergePolicy.class.getName (), 100)); MapConfig sentNotificationsMap = new MapConfig ("spring-boot-admin-application-store") .setInMemoryFormat (InMemoryFormat.OBJECT) .setBackupCount (1) .setEvictionPolicy (EvictionPolicy.LRU) .setMergePolicyConfig (nový MergePolerConfigConfig (new MergePolerConfig (new MergePolerConfig)) 100)); Config config = nový 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")); návratová konfigurácia; }}

6. Oznámenia

Ďalej poďme diskutovať o možnosti dostávať oznámenia zo servera správcu, ak sa niečo stane s našim registrovaným klientom. Pre konfiguráciu sú k dispozícii nasledujúce oznamovatele:

  • Email
  • PagerDuty
  • OpsGenie
  • Hipchat
  • Slack
  • Poďme si písať

6.1. E-mailové oznámenia

Najprv sa zameriame na konfiguráciu e-mailových upozornení pre náš server správcu. Aby sa to stalo, musíme pridať závislosť spúšťača pošty, ako je uvedené nižšie:

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

Potom musíme pridať konfiguráciu pošty:

spring.mail.host = smtp.example.com spring.mail.username = smtp_user spring.mail.password = smtp_password [chránené e-mailom]

Teraz, kedykoľvek náš registrovaný klient zmení svoj stav z UP na OFFLINE alebo inak, pošle sa e-mail na adresu nakonfigurovanú vyššie. U ostatných oznamovateľov je konfigurácia podobná.

6.2. Hipchat oznámenia

Ako uvidíme, integrácia s Hipchatom je celkom jednoduchá; existuje iba niekoľko povinných vlastností, ktoré je potrebné nastaviť:

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

Po ich definovaní si v miestnosti Hipchat všimneme, že dostávame upozornenia vždy, keď sa stav klienta zmení.

6.3. Konfigurácia prispôsobených oznámení

Môžeme nakonfigurovať vlastný notifikačný systém, ktorý má k dispozícii niekoľko výkonných nástrojov. Môžeme použiť a pripomínajúci oznamovateľ posielať naplánované upozornenie, kým sa stav klienta nezmení.

Alebo možno chceme posielať oznámenia filtrovanej skupine klientov. Na to môžeme použiť a oznamovateľ filtrovania:

@ Konfigurácia verejná trieda NotifierConfiguration {súkromné ​​konečné úložisko InstanceRepository; súkromný konečný ObjectProvider iné oznamovatele; public NotifierConfiguration (úložisko InstanceRepository, ObjectProvider otherNotifikátory) {this.repository = úložisko; this.otherNotifiers = otherNotifikátory; } @Bean public FilteringNotifier filteringNotifier () {delegát CompositeNotifier = nový CompositeNotifier (this.otherNotifiers.getIfAvailable (Collections :: emptyList)); vrátiť nový FilteringNotifier (delegát, toto.repozitár); } @Bean public LoggingNotifier notifier () {vrátiť nový LoggingNotifier (úložisko); } @Primary @Bean (initMethod = "start", destruMethod = "stop") public RemindingNotifier remindingNotifier () {RemindingNotifier remindingNotifier = nový RemindingNotifier (filteringNotifier (), úložisko); remindingNotifier.setReminderPeriod (Duration.ofMinutes (5)); remindingNotifier.setCheckReminderInverval (Duration.ofSeconds (60)); return remindingNotifier; }}

7. Záver

Tento úvodný tutoriál obsahuje jednoduché kroky, ktoré je potrebné urobiť, aby bolo možné monitorovať a spravovať jeho aplikácie Spring Boot pomocou nástroja Spring Boot Admin.

Automatická konfigurácia nám umožňuje pridať iba niektoré menšie konfigurácie a na konci mať plne funkčný server správ.

A ako vždy, ukážkový kód tohto sprievodcu nájdete na Githube.