Gerenciando ambiente de produção com Spring Boot Actuator
O Spring Boot Actuator é utilizado para monitorar e gerenciar aplicações em ambiente de produção de maneira dinâmica e simples. É possível fazer a monitoração e gerenciamento a partir de endpoints disponibilizados de forma automatizada.
Muitas funcionalidades já estão prontas para serem utilizadas em produção, sem a necessidade de desenvolvimento de código e podem ser encontradas na documentação oficial do Spring Actuator.
Instalação
Para utilizar o Spring Boot Actuator, basta importar as dependências através do Maven, Gradle ou pelo próprio Spring Initializer.
Maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Spring Initializer
Buscar por Spring Boot Actuator
Demo
O código fonte para demonstração, pode ser baixado no repositório a seguir e ser importado na IDE de preferência.
Git
Importar
No Eclipse ou Sprint Tools Suite:
File -> Import -> Existing Maven Projects -> select the pom.xml
Endpoints
Os endpoints já prontos e mais utilizados são:
- Health Endpoint
- Metrics Endpoint
- Logger Endpoint
Para habilitar a utilização dos endpoints de forma automática, basta incluir a linha abaixo no seu arquivo /src/main/resources/application.properties
management.endpoints.web.exposure.include=*
Executar
Vamos rodar a aplicação.
Essa é uma simples aplicação, que retorna uma lista com as distribuições mais utilizadas do linux, de acordo com o distro watch, na data em que estava sendo escrito este material.
Abrir o arquivo principal ActuatorDemoApplication.java, com o botão direto, selecionar a opção run as…, Spring Boot App.
Browser
No navegador abriremos a URL abaixo:
http://localhost:8080/distro/list
JSONView
Para melhor visualização, utilizar o plugin JSONView ou similar para o Chrome.
Endpoint Health
http://localhost:8080/actuator/health
Este endpoint mostra o estado de "saúde" de sua aplicação.
Endpoint Metrics
Informações de métricas da aplicação.
http://localhost:8080/actuator/metrics
Consumo de memória
Dentro de métricas, uma das opções é a visualização da memória que está sendo utilizada na aplicação.
http://localhost:8080/actuator/metrics/jvm.memory.used
Endpoint Loggers
Exibe informações sobre configuração das logs.
http://localhost:8080/actuator/loggers
Endpoint Configprops
Exibe informações sobre as configurações da aplicação. http://localhost:8080/actuator/configprops
Alterar configuração
Alteracao offline
Uma possibilidade de alterar a configuração da log, por exemplo, é através do arquivo: /src/main/resources/application.properties
Vamos alterar para modo de debug todos os SQLs que a aplicação gerar.
Adicionamos a linha abaixo:
logging.level.org.hibernate.SQL=DEBUG
Alteração online
Outra possibilidade, é alterar a configuração em uma aplicação que esteja sendo executada em produção.
Na linha de comando executaremos a sintaxe abaixo:
curl -X “POST” “http://localhost:8080/actuator/loggers/org.hibernate.SQL" -H “Content-Type: application/json; charset=utf-8” -d $’{ “configuredLevel”: “DEBUG” }’
- curl: Utilizado para realizar interações http.
- -X: qual o modo a ser utilizado, neste caso é POST.
- -H: inclusão de um header, JSON.
- -d: dado da solicitação.
Monitoração
O Spring Boot Actuator suporta um grande número de sistemas de monitoracao, entre eles estão: New Relic, DataDog, Prometheus, Grafana.
Seguranca
Todos os endpoint disponibilizados, entram como ativos assim que a aplicação sobe, exceto o de shutdown por motivos óbvios.
É possível especificar quais os endpoints fazem sentido e ativá-los individualmente com a linha a seguir no application.properties:
Comandos include/exclude
Ativar
management.endpoints.web.exposure.include=beans,metrics,info,health,loggers
Desativar
management.endpoints.jmx.exposure.exclude=beans
Conclusão
Este é um exemplo prático, sendo possível baixar o fonte no git, aplicar as configurações demonstradas e ver como é feito a monitoração e gerenciamento de sua aplicação através do Spring Boot Actuator.
Referências
Fonte Aplicação GIT
Spring Boot Features
Distro Watch
Spring Initializer