Monitorando uma aplicação Spring Boot (2.x) utilizando Actuator, Micrometer, Prometheus e Grafana (1ª Parte — Actuator)

Felipe da Rosa
ProJurisTech
Published in
4 min readMay 1, 2019

Com o Spring Boot, podemos criar aplicações corporativas que podem ir para produção em pouco tempo.

Considerando uma arquitetura distribuída é essencial podermos observar e monitorar o comportamento de uma aplicação em produção.

Para auxiliar nessa tarefa temos o Spring Actuator, que é uma biblioteca do próprio spring para coletar métricas, entender o trafego e o estado da aplicação. Com esse carinha tudo isso acaba se tornando fácil e trivial.

A ideia desse post é dar uma introdução sobre o monitoramento de uma aplicação spring boot.

Então, dividi isso em 2 partes:

  • Utilização do Spring Boot Actuator e explicação de alguns endpoints por ele fornecidos.
  • Visualização e monitoramento da aplicação utilizando ferramentas que se integram com o Actuator. (Próximo post)

Para utilizar como exemplo neste post criei uma aplicação bem básica, utilizando como dependências:

  • MongoDB como banco de dados;
  • Lombok para produtividade e eliminação de verbosidade;
  • Spring boot Web, para criar a API REST;
  • Actuator para permitir o monitoramento da aplicação;

O código do fonte do projeto pode ser encontrado neste link;

Actuator

Os endpoints do actuator é que vão permitir o monitoramento da aplicação, fornecendo informações tais como: health-check, coleta de métricas, http trace etc..

Essas funcionalidades podem ser acessadas via endpoints JMX e HTTP.

Para habilita-lo podemos adicionar sua dependência no projeto maven:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Após iniciar a aplicação, podemos ver que alguns endpoints padrões do actuator já estão disponíveis. Eles podem ser acessados no endpoint http://localhost:8087/actuator

Endpoints do actuator

Health

Mostra o status da aplicação, que será UP se a aplicação estiver integra e DOWN caso não esteja saudável devido a qualquer problema, como conectividade com banco de dados ou falta de espaço em disco por exemplo.

Retorno de localhost:8087/actuator/health

Podemos habilitar também os detalhes de health da estrutura do projeto (nesse caso, mongodb e espaço em disco), através do arquivo de propriedades:

A partir daí é possível visualizar a integridade da estrutura:

Agora, com o serviço do mongodb fora do ar:

Eu poderia também desativar o indicador de integridade do mongodb através da propriedade:

management.health.mongo.enabled=false

O actuator vem com alguns indicadores de health já pré-definidos, como por exemplo o MongoHealthIndicator e o DiskSpaceHealthIndicator.

O interessante ainda é que eu posso criar meu próprio indicador de health:

@Component
public class CustomHealthIndicator extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
builder.up()
.withDetail("app", "Tudo OK");
}
}

Após isso, ele já esta disponível no meu endpoint health:

Info

O endpoint info basicamente expõe algumas informações sobre a aplicação.

Também é possível adicionar algumas propriedades no application.yml:

info:
app:
name: @project.name@

Que traz o seguinte resultado acessando o http://localhost:8087/actuator/info

Expondo mais endpoints do actuator

Por padrão somente os endpoints health e info são expostos via HTTP, mas isso pode ser configurado:

# Expondo todos os endpoins disponíveis no actuator
management:
endpoints:
web:
exposure:
include: '*'

O resultado é semelhante a isso:

Podemos configurar a exposição do health e info novamente de forma manual:

management:
endpoints:
web:
exposure:
include: health, info

Vale a muito a pena consultar a Documentação Oficial do spring boot actuator, lá temos uma série de métricas que podem ser configurados para utilizarmos na nossa aplicação.

Micrometer

O micrometer atua como um façade, e a partir do spring boot 2.0 é a biblioteca padrão para exportação de métricas. Isso acaba facilitando adicionarmos qualquer sistema de monitoramento sem muito esforço.

Ele suporta várias ferramentas de monitoramento, tais como: Prometheus, datalog, Atlas e outros.

No próximo postvou criar a configuração do Micrometer para Prometheus (acesso das métricas via api e acesso via interface e gráfica) e por fim a configuração e acesso diretamente pelo Grafana.

A segunda parte do artigo encontra-se aqui.

O código do fonte do projeto pode ser encontrada neste link;

--

--