Spring-boot Admin

Spring-boot Admin

O spring-boot fornece uma ferramenta para monitoramento de suas aplicações como health-check, métricas, loggers e etc. Essa ferramenta é o acurator. Mas quando temos muitas aplicações spring-boot, como em uma solução com microservices, a administração e manejo do acurator se torna um pouco tediosa. Sendo assim o spring-boot fornece uma outra ferramenta para administrar toda as aplicações que utilizam o acurator é o Spring Boot Admin.

Abaixo listamos os endpoints que o acurator nos fornece:

actuator

auditevents

autoconfig

beans

configprops

dump

env

flyway

health

info

loggers

liquibase

metrics

mappings

shutdown

trace

Vamos ver um exemplo prático de como criar um ambiente com duas aplicações spring-boot com acurator e uma aplicação com Spring Boot Admin para administra-la.

Os códigos fontes desses exemplos estão disponíveis no github:

https://github.com/apedrina/blog/tree/master/alisson/spring-boot-admin

Primeiro vamos criar três projetos spring-boot no site:

https://start.spring.io/

Os nomes dos artefatos/projetos serão appA, appB e springboot-admin. Lembre-se de colocar no campo: “Search dependencies” o nome Actuator para os projetos appA e appB. Sendo assim nas app’s criadas teremos uma dependência como mostrado abaixo:


<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

 

Para os projetos appA e appB temos que colocar mais uma dependência que é um cliente para o Spring Boot Admin:


 <dependency>

    <groupId>de.codecentric</groupId>

    <artifactId>spring-boot-admin-starter-client</artifactId>

    <version>1.5.1</version>

    </dependency>

       <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-actuator</artifactId>

       </dependency>

      <dependency>

           <groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

      </dependency>

      <dependency>

           <groupId>org.springframework.boot</groupId>

           <artifactId>spring-boot-starter-test</artifactId>

           <scope>test</scope>

      </dependency>

 

Também precisamos informar no arquivo application.properties o endereço, a porta e senha e usuário da aplicação Springboot Admin:

 

spring.boot.admin.url=http://localhost:1111

management.security.enabled=false

spring.boot.admin.username=admin

spring.boot.admin.password=admin123

 

Interessante criar alguns controllers nas aplicações: appA e appB. Segue exemplo de um controller simples criado na appA:

 

package com.alissonpedrina.appA.controller;

import java.util.Arrays;

import java.util.List;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.http.MediaType;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class AppAController {

  private static final Logger LOGGER = LoggerFactory.getLogger(AppAController.class);

  @RequestMapping(value="/language/all", produces= MediaType.APPLICATION_JSON_VALUE)

  public List<String> getLanguages() {

    LOGGER.debug("Getting all the languages");
<ul>
	<li>    List<String> langs = Arrays.asList("java", "ruby", "javascript", "kotlin");</li>
</ul>
    return langs;

  }

}

Já no projeto/artefato “springboot-admin” colocamos as seguintes dependências:


<dependency>

   <groupId>org.springframework.boot</groupId>

   <artifactId>spring-boot-starter-security</artifactId>

</dependency>

<dependency>

   <groupId>de.codecentric</groupId>

   <artifactId>spring-boot-admin-server-ui-login</artifactId>

   <version>1.5.1</version>

</dependency>

<dependency>

   <groupId>de.codecentric</groupId>

   <artifactId>spring-boot-admin-server</artifactId>

   <version>1.5.1</version>

</dependency>

<dependency>

   <groupId>de.codecentric</groupId>

   <artifactId>spring-boot-admin-server-ui</artifactId>

   <version>1.5.1</version>

</dependency>

<dependency>

   <groupId>org.springframework.boot</groupId>

   <artifactId>spring-boot-starter</artifactId>

</dependency>

<dependency>

   <groupId>org.springframework.boot</groupId>

   <artifactId>spring-boot-starter-test</artifactId>

   <scope>test</scope>

</dependency>

 

As configurações do application.properties da aplicação  springboot-admin:

 

management.security.enabled=false

server.port=1111

security.user.name=admin

security.user.password=admin123

 

No mesmo projeto “springboot-admin” implementaremos o seguinte código:


@EnableAdminServer

@Configuration

@SpringBootApplication

public class SpringbootAdminApplication {

  public static void main(String[] args) {

    SpringApplication.run(SpringbootAdminApplication.class, args);

  }

  @Configuration

  public static class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override

    protected void configure(HttpSecurity http) throws Exception {

      http.formLogin().loginPage("/login.html").loginProcessingUrl("/login").permitAll();

      http.logout().logoutUrl("/logout");

      http.csrf().disable();

      http.authorizeRequests()

          .antMatchers("/login.html", "/**/*.css", "/img/**", "/third-party/**")

          .permitAll();

      http.authorizeRequests().antMatchers("/**").authenticated();

      http.httpBasic();

    }

  }

}

Suba as três aplicações e acesse a url:


http://localhost:1111

Outra característica importante são a notificações nos avisando quando uma aplicação foi interrompida ou quando está subindo. As notificações podem ser por:

  • Email
  • Pagerduty
  • Hipchat
  • Slack
  • Let’s Chat

Abaixo segue um exemplo de configuração que deve ficar no arquivo application.properties:


spring.boot.admin.notify.slack.webhook-url=https://hooks.slack.com/services/T4r8686/B5UM0989988L/77979797VD1hVt7GERTI3

spring.boot.admin.notify.slack.message="*#{application.names *#{to.status}*"

Assim terminamos nossa aplicação de exemplo, acesse os fontes no github, comente e compartilhe!!!

One thought on “Spring-boot Admin

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s