Tutorial de administração do Boot Spring



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 Actuator

Admin 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://localhost:8080 

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 .

Source: https://habr.com/ru/post/pt479954/


All Articles