
Controle e gerencie seus aplicativos Spring Boot com uma ótima interface de usuário nos pontos finais do Spring Boot Actuator.
Atuador de mola
O atuador é um módulo Spring Boot que adiciona pontos de extremidade REST / JMX ao seu aplicativo para que você possa rastreá-lo e gerenciá-lo facilmente em um ambiente de produção. Os terminais oferecem verificações de integridade, monitoramento de métricas, acesso a logs, despejos de encadeamento, despejos de heap, informações ambientais e muito mais. O autor falou em detalhes sobre o Atuador no seguinte artigo:
Atuador: Monitoramento e gerenciamento da produção de inicialização por mola
Monitore e gerencie seu aplicativo em execução com o Spring Boot Actuator 2.x. Colete métricas ou verifique a integridade do aplicativo.
Nota do tradutor. Existe um artigo semelhante sobre Habré:
Introdução ao Spring Boot ActuatorAdmin de inicialização do Spring
O atuador é uma ferramenta excelente e poderosa; além disso, seus pontos de extremidade são fáceis e convenientes de usar com outro aplicativo - você apenas usa a chamada de serviço REST. No entanto, o uso do atuador não é muito conveniente para uma pessoa. É muito mais fácil para o usuário ter uma boa interface do usuário que você pode usar para visualizar todos os dados de monitoramento e gerenciar seu aplicativo. É exatamente isso que o Spring Boot Admin serve. Ele fornece uma camada conveniente da interface do usuário sobre os pontos de extremidade do atuador, além de alguns recursos extras.
O Spring Boot Admin não é um módulo fornecido pela equipe do Spring, ele foi criado por uma empresa chamada
Codecentric . No entanto, seu código está disponível publicamente no
Github e é gratuito.
Cliente e servidor
Ao contrário do Actuator, o Spring Boot Admin na verdade consiste em duas partes - cliente e servidor.
A parte do servidor contém a interface com o usuário administrador e funciona independentemente dos aplicativos monitorados. A parte do cliente está localizada no aplicativo monitorado, registrado na parte do servidor.
Portanto, mesmo que nosso aplicativo não funcione ou não funcione corretamente, o servidor de monitoramento ainda está funcionando. Agora imagine que você possui vários aplicativos (como os microsserviços Spring Boot) e cada um deles pode funcionar em várias instâncias. Com o monitoramento tradicional do atuador, isso é difícil, pois você precisa acessar cada um deles individualmente e acompanhar quantas instâncias e onde está sendo executado.
Ao usar o Spring Boot Admin, cada instância do aplicativo monitorado (cliente) é registrada no servidor após o lançamento. Então você tem um único ponto (Admin Server) onde pode verificar todos eles.

Código fonte
O código fonte do aplicativo finalizado pode ser encontrado
neste repositório do Github .
Configuração do servidor
Vamos primeiro ver como configurar o Spring Boot Admin Server. Vamos começar com o novo aplicativo Spring Boot. Você pode criá-lo facilmente usando o
Spring Initializr . Certifique-se de ativar o módulo da
web .
Após criar o projeto, a primeira coisa que precisamos é adicionar a dependência do Spring Boot Admin Server:
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>2.1.0</version> </dependency>
Observe que, embora este projeto não tenha sido criado pelo Pivotal, você pode encontrar os módulos cliente e servidor do Spring Boot Admin no Spring Initializr. Em seguida, precisamos ativar o Servidor de administração anotando nossa classe principal de aplicativo usando a anotação
@EnableAdminServer :

Isso é tudo. Agora você pode iniciar seu aplicativo e depois de abrir a página, você verá uma tela como esta:

O servidor está em execução, mas os clientes ainda não estão registrados. Vamos consertar.
Configuração do cliente
Como na configuração do servidor, a primeira etapa é adicionar a dependência correta a um aplicativo existente:
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>2.1.0</version> </dependency>
Em seguida, você precisa determinar o URL em que seu servidor de administração está executando. Inclua esta linha no seu arquivo
application.properties :
spring.boot.admin.client.url=http:
Adicionando atuador
Agora você deve conseguir iniciar o cliente e o servidor. Apenas verifique se não há conflito de portas, pois os dois aplicativos usam 8080 por padrão.Para fins de teste, você pode definir
server.port = 0 em seu
application.properties para que seu cliente use uma porta aleatória na inicialização. Assim, você pode testar o lançamento de várias instâncias em execução em portas diferentes.
Ao abrir a interface do usuário do Admin Server, você deverá ver seu aplicativo. Quando você clica no nome do aplicativo, uma página com informações sobre o aplicativo deve aparecer.

Se você vir uma tela semelhante à acima com uma quantidade mínima de informações, significa que o seu projeto não possui o Atuador. Lembre-se de que o Spring Boot Admin usa os pontos de extremidade do atuador sob o capô. Felizmente, você só precisa adicionar uma dependência simples, e a configuração automática cuida do resto.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
No entanto, a maioria dos pontos de extremidade não é exibida por padrão no Atuador. Você precisa alterar sua configuração em
application.properties para expô-los:
management.endpoints.web.exposure.include=*
Após fornecer os pontos de extremidade do atuador, você verá muito mais informações na interface de administração:

Um guia detalhado sobre como configurar o Spring Boot Actuator pode ser encontrado
neste artigo .
Nota do tradutor. E em um
artigo sobre Habré .
Segurança
Agora que tudo está funcionando, precisamos garantir que os pontos de extremidade do atuador e a interface de administração não estejam acessíveis a todos.
Segurança do cliente
Se você já estiver usando o Spring Security, as opções acima não funcionarão para você, pois os pontos de extremidade da unidade estão protegidos por padrão e o servidor administrador não poderá acessá-los. Se você ainda não estiver usando o Spring Security, primeiro adicione a dependência:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
Para fins de teste, você pode desativar temporariamente a segurança do terminal do Actuator com
management.security.enabled = false . No entanto, queremos que a segurança seja ativada. Se você usa autenticação básica, pode simplesmente especificar o nome de usuário e a senha no arquivo de propriedades. Essas credenciais serão usadas pelo Admin Server para autenticação nos pontos de extremidade da unidade do cliente:
spring.boot.admin.client.instance.metadata.user.name=joe spring.boot.admin.client.instance.metadata.user.password=my-secret-password
Por padrão, a menos que seja configurado de outra forma, o Spring Boot por padrão usa o
usuário e gera a senha automaticamente cada vez que o aplicativo é iniciado. Você pode verificar a senha no console durante a inicialização. Se você desejar especificar explicitamente o nome de usuário e a senha necessários para seu aplicativo, poderá especificá-los em suas propriedades:
spring.security.user.name=joe spring.security.user.password=my-secret-password
Segurança do servidor
Assim como no cliente, precisamos adicionar uma dependência do Spring Security:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
Agora vamos configurar o nome de usuário e a senha necessários para efetuar login no Admin Server em seu
application.properties :
spring.security.user.name=admin spring.security.user.password=admin-password
Agora, no seu cliente, você também precisará adicionar essas credenciais, caso contrário, ele não poderá se registrar no servidor:
spring.boot.admin.client.username=admin spring.boot.admin.client.password=admin-password
Agora, de volta ao lado do servidor. A última coisa que precisamos é adicionar a configuração do Spring Security para proteger a interface do usuário administrador:
@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler(); successHandler.setTargetUrlParameter("redirectTo"); successHandler.setDefaultTargetUrl("/"); http.authorizeRequests() .antMatchers("/assets/**").permitAll() .antMatchers("/login").permitAll() .anyRequest().authenticated().and() .formLogin().loginPage("/login") .successHandler(successHandler).and() .logout().logoutUrl("/logout").and() .httpBasic().and() .csrf() .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) .ignoringAntMatchers( "/instances", "/actuator/**" ); } }
Isso fornecerá acesso à interface do administrador apenas para usuários autenticados que usam autenticação HTTP básica para efetuar login. A própria página de login e os recursos estáticos da interface do usuário, incluindo javascript, HTML e CSS, estão abertos. Caso contrário, você não poderá fazer login. Depois, há proteção contra a falsificação de solicitações entre sites (CSRF, falsificação de solicitações entre sites) com base em cookies. Você pode ver que alguns caminhos são ignorados na proteção CSRF - isso ocorre porque o Admin Server
não possui atualmente
o suporte adequado .
Agora, após a reinicialização, você verá uma bela tela de login protegendo o Admin Server:

Descoberta na nuvem
O cliente Spring Boot Admin não é a única maneira de registrar seus aplicativos no servidor. O Admin Server também oferece suporte ao Spring Cloud Service Discovery. Você pode ler mais na
documentação oficial ou no artigo "
Spring Cloud Discovery com Spring Boot Admin ".
Notificações
Assim que o monitoramento for iniciado, você será notificado quando algo der errado. A boa notícia é que o Spring Admin fornece uma ampla variedade de opções de notificação.
Se for a primeira vez que você visita a página Servidor de administração, ele solicita permissão para exibir notificações por push no seu computador. Sempre que ocorrer um problema, você receberá uma mensagem pop-up.

Outras notificações precisam de configuração fácil. Isso geralmente significa apenas fornecer algumas entradas em seu
application.properties . Atualmente, os seguintes serviços são suportados:
Configurar notificações por email
Se você deseja ativar as notificações por email, é necessário adicionar a dependência de email do Spring ao lado do servidor:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
Em seguida, você precisa determinar seu servidor SMTP, que será usado para enviar notificações e credenciais por email. Atualize seu
application.properties do seu Admin Server.
spring.mail.host=smtp.foo.com spring.mail.username=smtp-server-user spring.mail.password=smtp-server-password
Então você precisa identificar os destinatários e remetentes.
# Sender email address spring.boot.admin.notify.mail.from="Spring Boot Admin <noreply@foo.com>" # Comma-delimited list of recipient email addresses spring.boot.admin.notify.mail.to=alice@foo.com,bob@bar.com # Comma-delimited list of carbon copy recipient email addresses spring.boot.admin.notify.mail.cc=joe@foo.com
Conclusão
O Spring Boot Admin oferece uma camada de interface de usuário conveniente e útil sobre os pontos de extremidade do atuador. Além disso, permite controlar centralmente vários aplicativos com várias instâncias, o que é inestimável ao trabalhar na nuvem e com microsserviços. No entanto, verifique se você está protegendo suficientemente o cliente e o servidor. Para mais informações, consulte a
documentação oficial .