Spring Boot Actuator Endpoints permitem monitorar e interagir com nossa aplicação. O Spring Actuator é um sub-módulo do Spring Boot e fornece endpoints integrados que podemos habilitar e desabilitar para nossa aplicação.
Spring Boot Actuator Endpoints
Os Endpoints do Spring Boot Actuator são expostos via JMX e HTTP, na maioria das vezes usamos endpoints do Actuator baseados em HTTP porque são fáceis de acessar pelo navegador, comando CURL, scripts de 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 forma graciosa.
- 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 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, e abordaremos isso na parte posterior do tutorial.
Habilitar Pontos de Extremidade do Spring Actuator
Ao adicionar as Dependências do Spring Actuator ao nosso projeto spring boot, ele 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, quando você executar a aplicação, 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>)
Repare que apenas dois endpoints – health
e info
foram mapeados. A imagem abaixo mostra a saída desses endpoints do atuador.
Você notou que não há dados no
/actuator/info
, é 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 Endpoints do Atuador
Por padrão, o caminho base dos endpoints 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 Endpoints do Atuador
Podemos habilitar e desabilitar outros endpoints do atuador por meio de arquivos de propriedades. Se deseja habilitar todos os endpoints do atuador, adicione a seguinte propriedade.
management.endpoints.web.exposure.include=*
Para habilitar apenas endpoints específicos do atuador, forneça a lista de IDs de endpoint.
management.endpoints.web.exposure.include=health,info,beans,env
Segurança do Spring para Endpoints do Atuador
Observe que precisamos adicionar Segurança do Spring à nossa aplicação para habilitar endpoints adicionais, pois todos os outros endpoints exigem autenticação básica. Adicione a seguinte dependência de segurança do Spring à sua aplicação.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Também adicione nome de usuário e senha de 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á endpoints adicionais 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, ao 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 pontos de extremidade do atuador usando a anotação @Endpoint
em uma classe. Em seguida, precisamos usar as anotações @ReadOperation
, @WriteOperation
ou @DeleteOperation
nos métodos para expô-los como um bean de ponto de extremidade do atuador. Podemos criar Pontos de Extremidade específicos de tecnologia usando as anotações @JmxEndpoint
e @WebEndpoint
. Aqui está um exemplo do nosso próprio ponto de extremidade personalizado do atuador 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 ponto de extremidade? Também precisamos configurar isso na lista de pontos de extremidade do atuador a serem ativados. 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 ponto de extremidade 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 ponto de extremidade 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 em nosso Repositório no GitHub.
Source:
https://www.digitalocean.com/community/tutorials/spring-boot-actuator-endpoints