Introdução: por que o monitoramento de aplicações Java é essencial
\nUma 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.
\nNeste 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\n1. Métricas-chave de uma aplicação Java
\nO 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\n1.1. Métricas da JVM
\nEssas 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
1.2. Métricas de negócio
\nElas 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
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
2. Ferramentas para coleta de métricas: Micrometer + Prometheus
\nPara 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\n2.1. Integração do Micrometer no Spring Boot
\nSe você usa Spring Boot 2.x ou 3.x, adicione a dependência no pom.xml:
<dependency>\n <groupId>io.micrometer</groupId>\n <artifactId>micrometer-registry-prometheus</artifactId>\n</dependency>\nApós isso, o Spring Boot Actuator habilitará automaticamente o endpoint /actuator/prometheus, que fornecerá as métricas no formato do Prometheus.
2.2. Criando uma métrica personalizada
\nSuponha que você queira contar o número de chamadas bem-sucedidas e malsucedidas de um método. Crie um contador:
\nimport 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}\nNo Prometheus, a métrica aparecerá como orders_succ