Endpoints do Spring Boot Actuator

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:

  1. beans: este endpoint retorna a lista de todos os beans configurados em nossa aplicação.
  2. env: fornece informações sobre as propriedades do ambiente Spring.
  3. health: Mostra a saúde da aplicação
  4. info: Exibe informações da aplicação, podemos configurar isso nas propriedades do ambiente Spring.
  5. mappings: Exibe a lista de todos os caminhos @RequestMapping.
  6. shutdown: nos permite encerrar a aplicação de forma graciosa.
  7. 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