Monitoramento de aplicações Java: métricas e alertas de A a Z

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que o monitoramento de aplicações Java é essencial

\n

Uma aplicação Java moderna é um sistema distribuído complexo. Sem monitoramento, você trabalha no escuro: queda na velocidade de resposta, vazamento de memória ou um OutOfMemoryError repentino podem passar despercebidos até a reclamação do usuário. Um monitoramento bem configurado de métricas e alertas permite não apenas reagir rapidamente a incidentes, mas também prever gargalos antes que se tornem críticos.

\n

Neste artigo, abordaremos o ciclo completo: desde a coleta de métricas básicas da JVM até a configuração de alertas no Prometheus e visualização no Grafana. Todos os exemplos de código são escritos em Java usando a popular biblioteca Micrometer.

\n\n

1. Métricas-chave de uma aplicação Java

\n

O monitoramento começa com a escolha das métricas corretas. Elas podem ser divididas em três grupos: métricas da JVM, métricas de negócio e métricas de infraestrutura.

\n\n

1.1. Métricas da JVM

\n

Essas métricas mostram o estado da máquina virtual Java. As mais importantes são:

\n
    \n
  • Heap memory usage — uso do heap (memória usada / máxima). Um aumento repentino pode indicar vazamento.
  • \n
  • GC pauses — frequência e duração das coletas de lixo. Pausas longas (mais de 1 segundo) são sinal de problemas.
  • \n
  • Thread states — número de threads nos estados RUNNABLE, BLOCKED, WAITING. Muitos BLOCKED podem indicar bloqueio.
  • \n
  • CPU usage — uso da CPU pelo processo JVM.
  • \n
\n\n

1.2. Métricas de negócio

\n

Elas refletem a lógica da sua aplicação. Exemplos:

\n
    \n
  • Número de pedidos processados por minuto.
  • \n
  • Tempo de resposta de uma API externa.
  • \n
  • Número de erros de validação.
  • \n
\n\n

1.3. Métricas de infraestrutura

\n
    \n
  • Uso de disco, rede e memória do host.
  • \n
  • Estado das conexões com o banco de dados (pool de conexões).
  • \n
  • Atrasos em filas de mensagens (Kafka, RabbitMQ).
  • \n
\n\n

2. Ferramentas para coleta de métricas: Micrometer + Prometheus

\n

Para aplicações Java, o padrão de facto é a biblioteca Micrometer. Ela fornece uma fachada para vários sistemas de monitoramento (Prometheus, Datadog, Graphite). Em conjunto com o Prometheus (armazenamento de métricas) e o Grafana (visualização), você obtém um ecossistema poderoso e gratuito.

\n\n

2.1. Integração do Micrometer no Spring Boot

\n

Se você usa Spring Boot 2.x ou 3.x, adicione a dependência no pom.xml:

\n
<dependency>\n    <groupId>io.micrometer</groupId>\n    <artifactId>micrometer-registry-prometheus</artifactId>\n</dependency>
\n

Após isso, o Spring Boot Actuator habilitará automaticamente o endpoint /actuator/prometheus, que fornecerá as métricas no formato do Prometheus.

\n\n

2.2. Criando uma métrica personalizada

\n

Suponha que você queira contar o número de chamadas bem-sucedidas e malsucedidas de um método. Crie um contador:

\n
import io.micrometer.core.instrument.MeterRegistry;\nimport io.micrometer.core.instrument.Counter;\nimport org.springframework.stereotype.Service;\n\n@Service\npublic class OrderService {\n\n    private final Counter successCounter;\n    private final Counter errorCounter;\n\n    public OrderService(MeterRegistry registry) {\n        this.successCounter = Counter.builder("orders.success")\n                .description("Number of successful orders")\n                .register(registry);\n        this.errorCounter = Counter.builder("orders.error")\n                .description("Number of failed orders")\n                .register(registry);\n    }\n\n    public void processOrder(String orderId) {\n        try {\n            // lógica de processamento do pedido\n            successCounter.increment();\n        } catch (Exception e) {\n            errorCounter.increment();\n            throw e;\n        }\n    }\n}
\n

No Prometheus, a métrica aparecerá como orders_succ

Blogs

Book Recommendations