Saudação, Khabrovites! Em uma semana, as aulas começarão no novo grupo do curso
"Developer on the Spring Framework" . Nesse sentido, estamos compartilhando com você material útil que informa o que é o atuador de mola e como ele pode ser útil.

- O que é o atuador de mola?
- Como adicionar o Spring Actuator ao projeto Maven ou Gradle?
- Crie um projeto Spring Boot com uma dependência do Spring Actuator.
- Monitoramento de aplicativos com pontos finais do atuador de mola.
O que é o atuador de mola?Depois de desenvolver o aplicativo e implantá-lo na produção, é muito importante monitorar seu desempenho. Isso é especialmente verdadeiro para aplicativos de missão crítica, como sistemas bancários, nos quais a falha do aplicativo afeta diretamente os negócios.
Tradicionalmente, antes do Spring Actuator, precisávamos escrever código para testar a integridade do aplicativo, mas com o Spring Actuator não precisávamos escrever código. O Spring Actuator fornece vários pontos de extremidade que podem ser úteis para monitorar o aplicativo.
Como adicionar o Spring Actuator ao projeto Maven ou Gradle?Maven<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies>
Gradle dependencies { compile("org.springframework.boot:spring-boot-starter-actuator") }
Criando um projeto de inicialização com o Spring ActuatorVamos em frente e crie um projeto Spring Boot com as dependências Spring Actuator, Web e DevTools usando o
Spring Initializer .
Observe que no momento da redação deste artigo, a versão do Spring Boot era 2.1.0.

Importe o projeto para o Eclipse ou qualquer outro IDE e execute
SpringActuatorApplication.java
.
No console, você verá o seguinte:

Você pode ver que o Tomcat incorporado está sendo executado na porta 8080 e o
SpringActuatorApplication
sendo executado no Tomcat. Você também pode ver que os pontos de extremidade do atuador estão disponíveis em
/actuator.
018-11-09 20:00:29.346 INFO 8338 --- [ restartedMain] osbwembedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2018-11-09 20:00:29.354 INFO 8338 --- [ restartedMain] nbjsSpringActuatorApplication : Started SpringActuatorApplication in 9.273 seconds (JVM running for 11.823) 2018-11-09 20:00:29.190 INFO 8338 --- [ restartedMain] osbaeweb.EndpointLinksResolver : Exposing 2 endpoint(s) beneath base path '/actuator'.
Monitoramento de aplicativos com terminais de atuador de molaComo dissemos acima, o Spring Actuator fornece vários pontos de extremidade que podemos usar para monitorar a integridade do aplicativo.
Habilitando pontos de extremidadePor padrão, todos os terminais estão ativados, exceto o
shutdown
. Para ativar o terminal, use a seguinte propriedade no arquivo
application.properties
management.endpoint.<code><</code>id<code>></code>.enabled
Nota do tradutor: por padrão, o acesso a todos os terminais é apenas através do JMX, não há acesso via HTTP a todos os terminais (veja abaixo).
Um exemplo:Para ativar o terminal de
shutdown
, precisamos fazer a seguinte entrada no arquivo
application.properties
:
management.endpoint.shutdown.enabled=true
Podemos desativar todos os pontos de extremidade e incluir apenas aqueles que precisamos. Na próxima configuração, todos os pontos de extremidade, exceto
info
, serão desativados.
management.endpoints.enabled-by-default=false management.endpoint.info.enabled=true
Acesso aos terminais via HTTPVamos para a URL do
host local : 8080 / atuador e ver os pontos de extremidade disponíveis.
Nota: Eu uso o
Postman para testar, pois mostra o JSON em um formato bem estruturado. Você pode usar qualquer outra ferramenta ou apenas um navegador.

Como você já percebeu, apenas os pontos finais de
health
e
info
são mostrados aqui. Porque esses são os únicos pontos de extremidade acessíveis por padrão via http. O acesso via http a outros pontos de extremidade é fechado por padrão por motivos de segurança, pois eles podem conter informações confidenciais e, portanto, podem ser comprometidos.
Acesso a terminais específicosSe queremos fornecer acesso via web (http) a outros terminais, precisamos fazer as seguintes entradas no arquivo
application.properties
.
management.endpoints.web.exposure.include=< ><a href="http://localhost:8080/actuator"></a>
Um exemplo :
management.endpoints.web.exposure.include= health,info,env
Agora, depois de adicionar a entrada acima a
application.properties
, vamos novamente para
http: // localhost: 8080 / actuatorComo podemos ver na captura de tela abaixo, o endpoint
env
também está incluído.
Acesso a todos os terminaisSe quisermos incluir todos os pontos de extremidade, podemos usar o sinal
*
como mostrado abaixo.
management.endpoints.web.exposure.include=*
Acesso a todos, exceto alguns pontos finaisAs duas entradas abaixo ativam todos os pontos de extremidade, mas desativam o ponto de extremidade env.
management.endpoints.web.exposure.include=* management.endpoints.web.exposure.exclude=env

Desativando todos os terminais HTTPSe você não deseja fornecer pontos de extremidade via HTTP, pode fazer isso configurando o seguinte no arquivo
application.properties
:
management.server.port=-1
ou mais:
management.endpoints.web.exposure.exclude=*
Configurar URLs para acesso aos terminaisPor padrão, todos os terminais estão acessíveis via URL
/actuator
nos endereços do formulário
/actuator/{id}
. No entanto, você pode alterar o caminho
/actuator
base usando a seguinte propriedade em
application.properties
.
management.endpoints.web.base-path
Por exemplo, se você deseja tornar o URL base como
/monitor
vez de
/actuator
faça o seguinte:
management.endpoints.web.base-path=/monitor

Nesse caso, todos os pontos de extremidade estarão disponíveis como
/monitor/{id}
vez de
/actuator/{id}
Atuador de inicialização com mola de terminaisVamos discutir alguns dos pontos de extremidade mais importantes.
/ saúdeO terminal de
health
fornece o status geral do aplicativo: se está em funcionamento ou não. Isso é muito importante para monitorar o status do aplicativo quando ele está em produção. Esse terminal pode ser integrado aos aplicativos de monitoramento e será muito útil para determinar a integridade dos aplicativos em tempo real.
A quantidade de informações fornecidas pelo terminal de
health
depende da propriedade
management.endpoint.health.show-details
no arquivo
application.properties
.
Se
management.endpoint.health.show-details=never
, nenhuma informação adicional será exibida. Nesse caso, você verá apenas o seguinte (esse é o comportamento padrão).

Se
management.endpoint.health.show-details=always
, informações adicionais serão mostradas a todos os usuários. Como podemos ver na resposta abaixo, temos informações sobre o espaço em disco (diskSpace). Se o seu aplicativo estiver conectado a um banco de dados, você também verá informações sobre o status do banco de dados.

Se
management.endpoint.health.show-details=when-authorized
, informações adicionais serão mostradas apenas para usuários autorizados. A autorização pode ser configurada usando a propriedade
management.endpoint.health.roles
.
Indicadores predefinidosO Spring Boot Actuator possui muitos "indicadores de integridade" (HeathIndicators) configurados automaticamente para testar a integridade de várias partes do aplicativo. Por exemplo,
DiskspaceHealthIndicator
fornece informações de espaço em disco. Se você estiver usando o MongoDB, o
MongoHealthIndicator
verificará o banco de dados do Mongo (se o servidor está executando ou não) e exibirá as informações correspondentes. Por padrão, o status final do aplicativo é determinado pelo
HealthAggregator
, que simplesmente classifica a lista de status fornecida por cada
HealthIndicator
. O primeiro status na lista classificada é usado como o status final do aplicativo.
Desativando todos os indicadores pré-configuradosOs "indicadores de saúde" descritos acima são ativados por padrão, no entanto, você pode desativá-los usando a seguinte propriedade:
management.health.defaults.enabled=false
Desativando um Único IndicadorComo alternativa, você pode desativar um
HealthIndicator
separado, como mostrado abaixo, por exemplo, para desativar a verificação de espaço em disco:
management.health.diskspace.enabled=false
Nota: o identificador de qualquer
HealthIndicator
será o nome do bean sem o sufixo
HealthIndicator
.
Por exemplo :
DiskSpaceHealthIndicator diskspace MongoHealthIndicator mongo CassandraHealthIndicator cassandra DataSourceHealthIndicator datasource
e assim por diante ...
Escrevendo seus indicadores (HealthIndicator)Juntamente com o
HealthIndicator
fornecido pelo Spring Boot Actuator, podemos criar indicadores de status personalizados. Para fazer isso, você precisa criar uma classe que implemente a interface
HealthIndicator
, implemente seu método
health()
e retorne
Health
como resposta com as informações relevantes, conforme mostrado abaixo:
import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.stereotype.Component; @Component public class CustomHealthIndicator implements HealthIndicator { @Override public Health health() { int errorCode = 0;
Vamos para o terminal de integridade novamente e ver se nosso indicador está refletido ou não.

Nós vemos o nosso indicador.
Status de componente únicoVocê também pode verificar o status de um componente individual. No exemplo acima, vimos o indicador que escrevemos e diskSpace.
Se queremos ver apenas o status do disco, podemos usar o seguinte URL:
http: // localhost: 8080 / atuador / saúde / diskSpace
/ infoO terminal de
info
fornece informações gerais sobre o aplicativo que ele recebe de arquivos como
build-info.properties
ou
git.properties
ou das propriedades especificadas em
application.properties
.
Como não existe esse arquivo em nosso projeto, a resposta estará vazia, como mostrado abaixo:

O Spring Boot Actuator exibe informações de compilação se
META-INF/build-info.properties
. Este arquivo de informações do projeto é criado no momento da
build-info
destino de
build-info
da
build-info
. Aqui você também pode adicionar um número arbitrário de propriedades adicionais.
Vamos adicionar um destino de
build-info
para o
spring-boot-maven-plugin
no
pom.xm
l.
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.1.0.RELEASE</version> <executions> <execution> <goals> <goal>build-info</goal> </goals> <configuration> <additionalProperties> <encoding.source>UTF-8</encoding.source> <encoding.reporting>UTF-8</encoding.reporting> <java.source>${maven.compiler.source}</java.source> <java.target>${maven.compiler.target}</java.target> </additionalProperties> </configuration> </execution> </executions> </plugin>
Agora, vamos olhar novamente o ponto de
info
e ver as informações da montagem, como mostrado abaixo:

Além disso, podemos adicionar informações de aplicativos com a tecla
info
a
application.properties
, como mostrado abaixo, e elas serão exibidas no nó de extremidade
/info
.
info.application.name=spring-actuator info.application.description=spring boot actuator application info.application.version=0.0.1-SNAPSHOT
/ feijãoO terminal de
beans
mostra todos os
beans
definidos no contêiner Spring com as seguintes informações sobre cada bean:
aliases : scope : type : resource : (), dependencies :
Por exemplo, criei um RestController chamado
TestController
e injetei um componente chamado
TestService
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @Autowired private TestService testService; @GetMapping("/messages") public String getMessage() { return "Hello"; } } import org.springframework.context.annotation.Configuration; @Configuration public class TestService { }
Você pode ver como isso é mostrado para o testController na captura de tela abaixo.
/ configpropsO
configProps
mostra todos os
@ConfigurationProperties
anotados por
@ConfigurationProperties
.

Na captura de tela acima, vemos dois beans que são definidos no próprio Spring Framework e são anotados com
@ConfigurationProperties
e, portanto, são exibidos neste terminal.
A captura de tela abaixo mostra o código-fonte
HttpTraceProperties
anotado por
@ConfigurationProperties
.
/ envO terminal end fornece todas as informações ambientais na seguinte ordem:
/ heapdumpO nó de extremidade heapdump despeja a pilha do aplicativo. Esse ponto de extremidade retorna dados binários no formato HPROF. Como muitos dados geralmente são retornados, você deve salvá-los e analisá-los.
/ loggersO
loggers
criadores de logs fornece informações aos criadores de logs de aplicativos sobre o nível de log configurado (configureLevel) e o nível efetivo (effectiveLevel). Se o nível configurado não for especificado para o criador de logs e seu pai (nulo), o nível do criador de logs raiz será um nível efetivo.
A propriedade
level
indica quais níveis de log são suportados pela estrutura de log.

Para obter informações sobre um criador de logs específico, passe o nome (id) do criador de logs na URL após o
/loggers
, conforme mostrado abaixo:
http: // localhost: 8080 / actuator / loggers / nl.blogpsot.javasolutionsguide.springactuator.SpringActuatorApplication
/ métricasO terminal de
metrics
mostra todas as métricas que você pode rastrear para seu aplicativo.
Verificando métricas individuaisVocê pode assistir a uma única métrica passando-a no URL após
/metrics
, conforme mostrado abaixo:
http: // localhost: 8080 / atuador / métricas / jvm.memory.used
Referênciasdocs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.htmldocs.spring.io/spring-boot/docs/current/actuator-api/htmlDe acordo com a tradição estabelecida, aguardamos seus comentários e convidamos todos para
o dia aberto , que será realizado em 23 de maio.