Spring Boot Actuator Endpoints nos permite monitorar e interagir com nossa aplicação. O Spring Actuator é um submódulo do Spring Boot e fornece pontos de extremidade integrados que podemos ativar e desativar para nossa aplicação.
Spring Boot Actuator Endpoints
Os Endpoints do Spring Boot Actuator são expostos por meio de JMX e HTTP, na maioria das vezes utilizamos os endpoints do Actuator baseados em HTTP, pois são de fácil acesso pelo navegador, comando CURL, scripts shell, etc. Alguns dos endpoints do Actuator úteis são:
- beans: este endpoint retorna a lista de todos os beans configurados em nossa aplicação.
- env: fornece informações sobre as propriedades do ambiente Spring.
- health: Mostra a saúde da aplicação
- info: Exibe informações da aplicação, podemos configurar isso nas propriedades do ambiente Spring.
- mappings: Exibe a lista de todos os caminhos @RequestMapping.
- shutdown: nos permite encerrar a aplicação de maneira adequada.
- threaddump: fornece o despejo de thread da aplicação.
Você pode obter a lista completa dos pontos de extremidade do Spring Actuator aqui.
Segurança dos Pontos de Extremidade do Spring Actuator
Apenas os pontos de extremidade “health” e “info” são expostos sem nenhuma segurança; para acessar todos os outros pontos de extremidade, precisamos configurar nossa aplicação para a segurança do Spring. Isso é muito fácil de alcançar, abordaremos isso na parte posterior do tutorial.
Habilitar Pontos de Extremidade do Spring Actuator
Ao adicionarmos as Dependências do Spring Actuator ao nosso projeto Spring Boot, ela habilita automaticamente os pontos de extremidade do atuador. Adicione as dependências abaixo à sua aplicação Spring para habilitar os pontos de extremidade do Spring Boot Actuator.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Agora, ao executar a aplicação, você verá os pontos de extremidade do atuador sendo mapeados nos logs.
2018-06-19 15:23:20.715 INFO 6493 --- [main] o.s.b.a.e.web.EndpointLinksResolver: Exposing 2 endpoint(s) beneath base path '/actuator'
2018-06-19 15:23:20.723 INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/health],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 15:23:20.724 INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/info],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
Observe que apenas dois pontos finais – health
e info
foram mapeados. A imagem abaixo mostra a saída desses pontos finais do atuador.
Você notou que não há dados no
/actuator/info
, isso ocorre porque não os configuramos. Basta adicionar as seguintes propriedades ao seu arquivo application.properties
.
info.app.name=Spring Actuator Example
info.app.java.version=10
info.app.type=Spring Boot
Reinicie a aplicação e você obterá a seguinte saída:
Personalizando o Caminho Base dos Pontos Finais do Atuador
Por padrão, o caminho base dos pontos finais do atuador é /actuator
, podemos alterá-lo para qualquer outro valor definindo management.endpoints.web.base-path
no arquivo de propriedades da aplicação.
management.endpoints.web.base-path=/management
Expondo Outros Pontos Finais do Atuador
Podemos ativar e desativar outros pontos finais do atuador por meio de arquivos de propriedades. Se desejar ativar todos os pontos finais do atuador, adicione a seguinte propriedade.
management.endpoints.web.exposure.include=*
Para habilitar apenas endpoints de atuadores específicos, forneça a lista de IDs de endpoints.
management.endpoints.web.exposure.include=health,info,beans,env
Segurança do Spring para Endpoints de Atuadores
Observe que precisamos adicionar Segurança do Spring à nossa aplicação para habilitar endpoints adicionais, pois todos os outros endpoints requerem autenticação básica pelo menos. Adicione a seguinte dependência para a segurança do Spring em sua aplicação.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Também adicione o nome de usuário e a senha da segurança do Spring no arquivo de propriedades da aplicação.
spring.security.user.name=pankaj
spring.security.user.password=pankaj
Reinicie a aplicação e você verá que endpoints adicionais estão sendo mapeados.
2018-06-19 16:18:22.211 INFO 6627 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/beans],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 16:18:22.212 INFO 6627 --- [ main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 16:18:22.212 INFO 6627 --- [ main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env/{toMatch}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
Agora, quando tentar acessar os endpoints seguros do atuador, será necessário fornecer credenciais de login. As imagens abaixo mostram a resposta dos endpoints
beans
e env/java.home
.
Endpoints Personalizados do Spring Actuator
Uma das grandes características do Spring Framework é que é muito fácil de estender. Podemos criar nossos próprios endpoints personalizados do atuador usando a anotação @Endpoint
em uma classe. Em seguida, devemos usar as anotações @ReadOperation
, @WriteOperation
ou @DeleteOperation
nos métodos para expô-los como um bean do endpoint do atuador. Podemos criar Endpoints específicos de tecnologia usando as anotações @JmxEndpoint
e @WebEndpoint
. Aqui está um exemplo do nosso próprio endpoint personalizado do atuador do Spring.
package com.journaldev.spring;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Endpoint(id="myendpoint")
@Component
public class MyCustomEndpoints {
@ReadOperation
@Bean
public String hi() {
return "Hi from custom endpoint";
}
}
Você notou o id do endpoint? Também precisamos configurar isso na lista de endpoints do atuador a serem habilitados. Atualize as seguintes propriedades no arquivo application.properties
.
management.endpoints.web.exposure.include=health,info,beans,env,myendpoint
Agora, quando você iniciar a aplicação, verifique se este novo endpoint está sendo mapeado nos logs.
2018-06-19 17:06:59.743 INFO 6739 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/myendpoint],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
A imagem abaixo mostra a saída quando invocamos nosso endpoint personalizado do atuador.
Resumo
O Spring Boot Actuator é um módulo de gerenciamento e informação pronto para produção. Podemos facilmente estendê-lo para adicionar nossas próprias APIs e gerenciar nossa aplicação.
Você pode baixar o projeto completo do nosso Repositório do GitHub.
Source:
https://www.digitalocean.com/community/tutorials/spring-boot-actuator-endpoints