Monitoramento de aplicações Java: biblioteca Micrometer
As aplicações Java modernas exigem monitoramento constante de desempenho, consumo de memória, tempo de resposta e outros parâmetros críticos. Micrometer é a biblioteca padrão de facto para coleta de métricas no ecossistema Java, que fornece uma API universal e suporta exportação de dados para sistemas populares de monitoramento, como Prometheus, Graphite e Datadog.
O que é Micrometer e por que é necessário?
Micrometer é uma fachada para coleta de métricas, semelhante à forma como SLF4J é uma fachada para logging. Ele abstrai o código da aplicação do sistema de monitoramento específico, permitindo alternar entre backends sem alterar a lógica de negócios.
Principais recursos da biblioteca:
- Contadores (Counter) — para contagem de eventos (por exemplo, número de requisições).
- Temporizadores (Timer) — para medir o tempo de execução de operações.
- Medidores (Gauge) — para rastrear valores atuais (por exemplo, tamanho do pool de threads).
- Resumos de Distribuição (DistributionSummary) — para análise de distribuição de valores (por exemplo, tamanho do corpo da requisição).
- Tags — para adicionar dimensões às métricas (por exemplo,
endpoint,status).
Instalação e configuração
Para usar Micrometer em um projeto Maven, adicione a seguinte dependência no pom.xml:
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-core</artifactId> <version>1.12.0</version></dependency>Se você estiver usando Spring Boot, basta adicionar o starter micrometer-registry-prometheus:
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>1.12.0</version></dependency>Após isso, o Spring Boot configurará automaticamente o MeterRegistry e abrirá o endpoint /actuator/prometheus para coleta de métricas.
Exemplos de uso
1. Criando um contador de requisições
Exemplo simples de contagem do número de chamadas de um método:
import io.micrometer.core.instrument.Counter;import io.micrometer.core.instrument.MeterRegistry;
public class RequestCounter { private final Counter requestCounter;
public RequestCounter(MeterRegistry registry) { this.requestCounter = Counter.builder("api.requests") .tag("endpoint", "/users") .description("Total number of requests to /users") .register(registry); }
public void handleRequest() { requestCounter.increment(); // lógica de negócios }}2. Medindo o tempo de execução com um temporizador
Use Timer.Sample para medir o tempo de execução de um bloco de código:
import io.micrometer.core.instrument.Timer;import io.micrometer.core.instrument.MeterRegistry;
public class RequestTimer { private final Timer requestTimer;
public RequestTimer(MeterRegistry registry) { this.requestTimer = Timer.builder("api.response.time") .tag("endpoint", "/data") .publishPercentiles(0.95, 0.99) .register(registry); }
public String processRequest() { Timer.Sample sample = Timer.start(registry); try { // emulação de atraso Thread.sleep(100); return "OK"; } catch (InterruptedException e) { Thread.currentThread().interrupt(); return "ERROR"; } finally Também na biblioteca
Envio de email em TypeScript: bibliotecas e exemplos de código
Frameworks CLI para Kotlin: criação de aplicações de console
Envio de Email em TypeScript: guia completo com nodemailer e SMTP
Métricas Prometheus em Rust: bibliotecas prometheus e metrics-exporter-prometheus
Processamento JSON em Swift: Codable, Foundation e SwiftyJSON para iOS/macOS