Introdução ao Micrometer

Micrometer é uma ferramenta essencial para quem procura uma maneira eficaz de observar e monitorar aplicações Java Virtual Machine (JVM) de forma independente do fornecedor. Ele atua como uma fachada sobre os clientes de instrumentação dos sistemas de observabilidade mais populares, permitindo que você instrumente seu código sem estar vinculado a um único sistema de monitoramento. Esta abordagem é comparável ao SLF4J, mas voltada para a observabilidade das aplicações.
A principal vantagem do Micrometer é sua capacidade de publicar métricas para uma variedade de sistemas de back-end, incluindo AppOptics, Azure Monitor, Datadog, Dynatrace, Prometheus, entre outros. Isso é facilitado por meio de uma API que suporta uma variedade de tipos de métricas.
Métricas da JVM fornecidas pelo Micrometer incluem
-
Métricas de Memória: Monitora o uso de memória do heap e non-heap, incluindo buffer e utilização de memory pool.
-
Métricas de Garbage Collector: Fornece dados sobre a frequência e tempo das pausas do GC, além de taxas de promoção e alocação.
-
Métricas de Threads: Reporta o número de threads vivas, o pico de threads e quantas dessas são daemons.
-
Métricas do ClassLoader: Registra o número de classes carregadas e descarregadas pela JVM.
-
Métricas do Processador: Oferece informações sobre a carga e o total atual de CPU.
Além das métricas, o Micrometer oferece capacidades robustas de rastreamento distribuído através do Micrometer Tracing, que integra com ferramentas de rastreamento como Brave e OpenTelemetry. Isso permite insights mais profundos em sistemas complexos, ajudando a identificar a causa raiz dos problemas mais rapidamente.
O Micrometer também suporta a propagação de contexto, o que é essencial para manter a continuidade das informações de rastreamento e métricas em transições de thread ou em chamadas de microserviços. Isso é particularmente útil em ambientes de microserviços onde operações assíncronas são comuns.
Para começar a usar o Micrometer em seus projetos, você pode integrá-lo facilmente com frameworks populares como Spring, Quarkus e Micronaut, aproveitando os modelos e configurações nativos desses frameworks.
Integrando Micrometer com Spring Boot 3 e Prometheus
A integração do Micrometer com o Spring Boot 3 e o Prometheus é facilitada pelo uso do Spring Boot Actuator, que fornece endpoints gerenciados para acessar o estado e as métricas da aplicação. Aqui está um guia passo a passo para configurar essa integração:
Dependências Necessárias:
Inclua no seu arquivo pom.xml
as dependências do Spring Boot Actuator e do Micrometer com implementação para o Prometheus:
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Configuração no application.properties:
management.endpoints.web.exposure.include=prometheus
Acesso às Métricas:
Com tudo configurado, as métricas podem ser acessadas através do endpoint /actuator/prometheus
, que mostrará todas as métricas coletadas pelo Micrometer formatadas para o Prometheus.
Este é um exemplo das métricas dos endpoints do nosso blog, desenvolvido com Spring Boot e utilizando o Micrometer em conjunto com o Prometheus. As métricas apresentadas neste endpoint estão no formato esperado pelo Prometheus, facilitando o processo de coleta e armazenamento dos dados em sua base.
# HELP http_server_requests_seconds
# TYPE http_server_requests_seconds summary
http_server_requests_seconds_count{error="none",exception="none",method="GET",outcome="SUCCESS",status="200",uri="/tag/{url}",} 11.0
http_server_requests_seconds_sum{error="none",exception="none",method="GET",outcome="SUCCESS",status="200",uri="/tag/{url}",} 0.1266035
http_server_requests_seconds_count{error="none",exception="none",method="GET",outcome="SUCCESS",status="200",uri="/post/{url}",} 3.0
http_server_requests_seconds_sum{error="none",exception="none",method="GET",outcome="SUCCESS",status="200",uri="/post/{url}",} 0.0640866
http_server_requests_seconds_count{error="none",exception="none",method="GET",outcome="SUCCESS",status="200",uri="/about",} 1.0
http_server_requests_seconds_sum{error="none",exception="none",method="GET",outcome="SUCCESS",status="200",uri="/about",} 0.007984
http_server_requests_seconds_count{error="none",exception="none",method="GET",outcome="SUCCESS",status="200",uri="/actuator/prometheus",} 1.0
http_server_requests_seconds_sum{error="none",exception="none",method="GET",outcome="SUCCESS",status="200",uri="/actuator/prometheus",} 0.0285211
http_server_requests_seconds_count{error="none",exception="none",method="GET",outcome="SUCCESS",status="200",uri="/transparencia",} 1.0
http_server_requests_seconds_sum{error="none",exception="none",method="GET",outcome="SUCCESS",status="200",uri="/transparencia",} 0.0065346
http_server_requests_seconds_count{error="none",exception="none",method="GET",outcome="SUCCESS",status="200",uri="/partnership",} 1.0
http_server_requests_seconds_sum{error="none",exception="none",method="GET",outcome="SUCCESS",status="200",uri="/partnership",} 0.006808
http_server_requests_seconds_count{error="none",exception="none",method="GET",outcome="SUCCESS",status="200",uri="/consultancy",} 2.0
http_server_requests_seconds_sum{error="none",exception="none",method="GET",outcome="SUCCESS",status="200",uri="/consultancy",} 0.0122761
Integração Automática com Bibliotecas
Uma das grandes vantagens de integrar o Micrometer com o Spring Boot é a capacidade de coletar métricas de bibliotecas comumente utilizadas de forma automática. Quando configurado com o Spring Boot, o Micrometer pode automaticamente fornecer métricas detalhadas de várias bibliotecas como:
-
Redis
-
HikariCP (para pooling de conexões de banco de dados)
-
Spring Data
Essas métricas são coletadas automaticamente sem a necessidade de configuração adicional, permitindo que desenvolvedores tenham uma visão detalhada sobre a performance dessas integrações e como elas impactam a aplicação.
Esta configuração não só facilita o monitoramento de aplicações em produção, como também amplia as capacidades de observabilidade do Spring Boot, tornando-as acessíveis através de uma interface padronizada e bem integrada.
Conclusão
Em resumo, o Micrometer oferece uma solução robusta e flexível para a observabilidade de aplicações JVM, integrando-se perfeitamente com diversas plataformas e frameworks. Com suas capacidades avançadas de coleta de métricas e rastreamento distribuído, o Micrometer se posiciona como uma ferramenta indispensável para qualquer desenvolvedor que deseja melhorar a monitoração e a performance de suas aplicações. Adotar o Micrometer em seus projetos não só potencializa a capacidade de diagnóstico em tempo real, mas também facilita a manutenção e a escalabilidade dos sistemas em ambientes dinâmicos e distribuídos.