Spring Boot Actuator e Prometheus no Kubernetes
Aprenda a configurar o Spring Boot Actuator com Prometheus no Kubernetes na AWS para monitorar seus microsserviços Java.

Como Monitorar Aplicações Java com Spring Boot Actuator no Kubernetes usando Prometheus

Muitas empresas perdem milhares de dólares na nuvem devido a quedas invisíveis de microsserviços. No entanto, existe um método definitivo para evitar o temido erro OutOfMemoryError na AWS. Neste artigo, você vai aprender como monitorar aplicações Java com Spring Boot Actuator no Kubernetes usando Prometheus de forma extremamente eficiente.

Entender a saúde da JVM em tempo real garante a estabilidade do seu software. Portanto, aplicar técnicas de observabilidade evita que gargalos de processamento degradem a experiência do usuário final. Você aprenderá o passo a passo para configurar e proteger sua arquitetura hoje mesmo.

O desafio oculto do gerenciamento de memória em microsserviços Java

Rodar aplicações Java em produção dentro de contêineres Kubernetes exige atenção constante aos recursos de infraestrutura. Muitas equipes de engenharia enfrentam lentidão crônica ou reinicializações repentinas causadas por falhas de recursos na AWS. Por isso, entender o comportamento interno da JVM em tempo real é o único caminho para evitar indisponibilidades.

Imagine que sua aplicação Java consome CPU de forma silenciosa até travar o pod no cluster Kubernetes. Sem as ferramentas certas, identificar se a causa raiz é um vazamento de memória ou threads bloqueadas se torna uma tarefa de adivinhação exaustiva. Como resultado, o tempo médio de resolução de incidentes aumenta, gerando desgaste na equipe técnica.

Felizmente, a combinação do Spring Boot Actuator com o Prometheus entrega métricas profundas de forma nativa. Dessa forma, você consegue antecipar problemas graves de infraestrutura antes que eles derrubem seus microsserviços Java. Acompanhe a nossa análise detalhada para proteger o seu ambiente de desenvolvimento.

Por que a telemetria do Spring Boot Actuator é indispensável no Kubernetes

O Spring Boot Actuator expõe pontos de acesso HTTP que revelam detalhes íntimos da execução da Java Virtual Machine. Ou seja, ele funciona como um raio-X completo do seu microsserviço. Ele exibe dados cruciais como consumo de Heap, comportamento do Garbage Collector e conexões ativas no pool de banco de dados.

Além disso, a chegada das Virtual Threads no Java trouxe novos desafios de monitoramento para os engenheiros de software. Embora essas threads leves melhorem drasticamente o rendimento de requisições, elas demandam métricas específicas para evitar o starvation de threads de plataforma. Para entender melhor esse ecossistema moderno, você pode ler o nosso artigo sobre Virtual Threads e Claude: Otimize APIs Java.

Para implementar essa solução de monitoramento, nós dividimos o processo em etapas práticas. Primeiro, faremos o ajuste das dependências do projeto Java. Em seguida, configuraremos as propriedades de segurança para proteger os endpoints. Por fim, criaremos os manifestos do Kubernetes para automatizar a descoberta de métricas.

Configurando as dependências necessárias no Maven com Spring Boot e Prometheus

Primeiramente, você precisa adicionar as bibliotecas corretas no seu arquivo pom.xml para habilitar a coleta de dados de performance. Nós utilizaremos o micrômetro do Prometheus para essa tarefa de integração. Esse componente traduz o formato interno do Actuator para a linguagem que o servidor do Prometheus compreende.

Insira o seguinte bloco de código XML no seu arquivo de build:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

Essa simples inclusão garante que sua aplicação comece a registrar dados vitais imediatamente após a inicialização. Além disso, o Micrometer gerencia a coleta com baixíssimo overhead de processamento. Assim, você preserva a performance original do seu microsserviço Java.

Protegendo os endpoints de monitoramento na Cloud AWS

Expor dados como variáveis de ambiente e beans ativos da aplicação representa um risco grave de segurança da informação. Por isso, nunca devemos liberar o acesso irrestrito aos caminhos sensíveis do Actuator na internet pública. A estratégia ideal consiste em expor apenas o endpoint do Prometheus e manter os demais protegidos internamente.

No seu arquivo application.yml, aplique as seguintes configurações restritivas:

management:
  endpoints:
    web:
      exposure:
        include: "prometheus,health"
  endpoint:
    health:
      show-details: when_authorized
    prometheus:
      enabled: true

Desta forma, apenas os dados estritamente necessários para as sondas de liveness e readiness do Kubernetes ficam acessíveis. Consequentemente, reduzimos drasticamente a superfície de ataque da nossa aplicação Java na AWS sem prejudicar a observabilidade.

Endpoint Função Principal Recomendação de Segurança
/actuator/prometheus Fornece métricas formatadas para coleta externa. Liberar apenas para o IP do Prometheus.
/actuator/health Indica o estado de saúde da aplicação. Expor de forma resumida para o Kubernetes.
/actuator/env Exibe variáveis de ambiente do sistema. Manter estritamente bloqueado em produção.

Configurando o Kubernetes para coletar métricas do Spring Boot

Agora que nossa aplicação Java está gerando os dados corretamente, precisamos orientar o cluster Kubernetes a encontrá-la. Para atingir esse objetivo, utilizamos anotações especiais nos metadados do serviço. Dessa forma, o Prometheus realiza a autodescoberta de forma totalmente dinâmica.

Crie um arquivo chamado service.yaml com a seguinte estrutura de configuração:

apiVersion: v1
kind: Service
metadata:
  name: java-app-service
  annotations: 
    prometheus.io/scrape: "true"
    prometheus.io/path: "/actuator/prometheus"
    prometheus.io/port: "8080"
spec:
  selector:
    app: java-app
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080

Essas anotações no bloco de metadados informam ao Prometheus que ele deve realizar requisições de raspagem periódicas nessa porta específica. Como resultado, qualquer nova instância ou pod criado pelo Kubernetes será automaticamente monitorado sem nenhuma intervenção manual.

Se você deseja elevar o nível de automação da sua equipe, recomendamos explorar nossos guias práticos sobre orquestração de microsserviços. Você pode conferir nosso artigo completo sobre Spring AI e Kubeflow: Pipelines ML no Kubernetes para integrar fluxos modernos de inteligência artificial.

Monitorando o consumo de conexões do banco de dados em tempo real

Um dos maiores vilões de indisponibilidade em sistemas de alta concorrência é o esgotamento de conexões com o banco de dados. Utilizando o pool HikariCP, padrão do Spring Boot, o Actuator expõe automaticamente métricas detalhadas sobre o estado das conexões.

Fique especialmente atento aos seguintes indicadores gerados no seu painel:

  • hikaricp_connections_active: Quantidade de conexões atualmente em uso por requisições ativas.
  • hikaricp_connections_pending: Número de threads aguardando por uma conexão livre para executar consultas.
  • hikaricp_connections_timeout: Total de falhas por estouro de tempo limite na tentativa de obter conexão.

Se a métrica de conexões pendentes começar a subir de forma consistente, seu banco de dados está operando no limite físico. Portanto, realize ajustes no tamanho máximo do pool ou otimize as consultas SQL antes que o sistema entre em colapso completo.

Perguntas frequentes sobre monitoramento Java no Kubernetes

O Spring Boot Actuator consome muita memória ou CPU ao expor métricas?

Não, pois o impacto na performance é extremamente insignificante na maioria dos cenários de uso. O Micrometer foi desenhado para registrar eventos em memória usando estruturas de dados altamente otimizadas e sem travas de concorrência.

Como garantir que dados sensíveis não vazem pelo endpoint /prometheus?

Você deve desabilitar os endpoints desnecessários e expor apenas as métricas de performance para o Prometheus. Adicionalmente, configure regras de rede no Kubernetes usando NetworkPolicies para permitir conexões na porta do Actuator vindas exclusivamente do namespace do Prometheus.

Como visualizar essas métricas coletadas pelo Prometheus de forma gráfica?

O método mais eficiente e comum no mercado é integrar o Prometheus ao Grafana para criar dashboards dinâmicos. Existem diversos painéis prontos criados pela comunidade, como o famoso painel JVM Dashboard, que exibem esses dados coletados de forma visual e intuitiva.

Conclusão

Monitorar aplicações Java com Spring Boot Actuator no Kubernetes usando Prometheus elimina os pontos cegos da sua infraestrutura e evita desastres de memória. Essa integração poderosa garante estabilidade, visibilidade completa e resiliência na nuvem para os seus microsserviços.

Para aprender mais sobre infraestrutura moderna, orquestração e desenvolvimento de sistemas robustos, conheça os nossos guias exclusivos. Explore outros artigos do Meu Universo Nerd hoje mesmo e domine o ecossistema tecnológico mais demandado do mercado!

O Gargalo Silencioso: Como a Falta de Métricas no Kubernetes Prejudica seu Negócio

Gerenciar aplicações Java em produção exige atenção constante. No entanto, muitas empresas enfrentam lentidão crônica sem entender o motivo real. O Kubernetes gerencia seus contêineres perfeitamente, mas ele não conhece a saúde interna da JVM. Além disso, o comportamento do Spring Boot sob carga pesada pode mascarar vazamentos de memória graves.

Sem a telemetria adequada, sua equipe atua de forma puramente reativa. Os incidentes geram estresse e afetam diretamente a experiência do usuário final. Por isso, integrar métricas detalhadas ao seu fluxo de monitoramento é crucial. É nesse cenário que o Prometheus se torna indispensável para o sucesso da operação.

A Anatomia do Problema: Por que a JVM Precisa de Monitoramento Especializado

A Java Virtual Machine possui características únicas de gerenciamento de memória. O coletor de lixo (Garbage Collector) realiza pausas que podem elevar a latência das requisições. Portanto, monitorar apenas o uso de CPU do contêiner gera uma falsa sensação de segurança. Você precisa visualizar o comportamento real da memória heap e não heap.

Adicionalmente, o pool de conexões com o banco de dados frequentemente se torna um gargalo oculto. Quando as conexões se esgotam, as requisições acumulam e travam a aplicação Java. Assim, expor essas métricas internas ajuda a prever falhas antes que elas causem indisponibilidade.

A Solução Definitiva com Spring Boot Actuator e Prometheus

O Spring Boot Actuator expõe endpoints nativos com dados vitais do sistema. Combinado com a biblioteca Micrometer, ele traduz esses dados para o formato aceito pelo Prometheus. Essa integração transforma dados complexos em gráficos visíveis e fáceis de interpretar pelo time de engenharia.

No ecossistema Kubernetes, o Prometheus realiza a autodescoberta dos seus serviços. Ele lê as configurações das suas aplicações Java de forma automática e dinâmica. Como resultado, sua equipe ganha agilidade e elimina a necessidade de configurações manuais para cada novo pod implantado.

Métrica do ActuatorNome no PrometheusO que monitora
jvm.memory.usedjvm_memory_used_bytesUso real de memória da JVM por região
jvm.gc.pausejvm_gc_pause_seconds_sumTempo total gasto com pausas do Garbage Collector
hikaricp.connections.activehikaricp_connections_activeConexões ativas no pool do banco de dados
http.server.requestshttp_server_requests_seconds_countTotal de requisições HTTP recebidas pela aplicação

Configurando o Scraping do Prometheus no Kubernetes

Para o Prometheus coletar os dados, você deve adicionar anotações específicas no Deployment da sua aplicação. Essas instruções indicam a porta e o caminho correto onde o Spring Boot expõe os dados. Veja abaixo as configurações necessárias que devem constar no arquivo YAML do seu serviço.

Anotações obrigatórias para o Kubernetes Pod Template:

  • prometheus.io/scrape: "true"
  • prometheus.io/path: "/actuator/prometheus"
  • prometheus.io/port: "8080"

Depois de aplicar essas anotações, o servidor do Prometheus inicia a coleta automaticamente. Esse processo é escalável e funciona de forma idêntica tanto em ambientes locais quanto na nuvem da AWS. Desse modo, o monitoramento acompanha o crescimento da sua infraestrutura sem esforço extra.

Arquitetura de Produção: Alta Disponibilidade na AWS

Executar aplicações críticas exige uma infraestrutura resiliente e distribuída geograficamente. Na nuvem da AWS, você pode hospedar seu cluster Kubernetes utilizando o EKS (Elastic Kubernetes Service). Essa abordagem garante que os pods Java sejam distribuídos em diferentes zonas de disponibilidade.

Além disso, o armazenamento das métricas coletadas pelo Prometheus pode ser centralizado no Amazon Managed Prometheus. Esse serviço gerenciado remove a complexidade de manter servidores de banco de dados temporais de alta escala. Consequentemente, sua equipe de tecnologia foca exclusivamente na otimização do código Java e na entrega de valor para os clientes.

Para garantir a segurança, utilize regras rígidas de acesso através do IAM (Identity and Access Management). Limite quais serviços podem ler o endpoint do Actuator na sua rede interna. Dessa forma, você protege dados sensíveis do sistema contra acessos não autorizados de agentes externos.

Perguntas frequentes

O uso do Spring Boot Actuator com Prometheus gera impacto de performance na aplicação Java?

O impacto na performance é extremamente baixo e quase imperceptível na maioria dos cenários de produção. O Micrometer, que faz a ponte entre o Actuator e o Prometheus, foi desenvolvido para ser leve e eficiente, realizando coletas na memória de forma otimizada. No entanto, é recomendável ajustar o intervalo de coleta (scrape interval) do Prometheus para no mínimo 15 segundos para evitar sobrecarga desnecessária sob tráfego massivo.

Como garantir que o endpoint do Actuator não fique exposto publicamente na internet?

A melhor prática consiste em configurar portas diferentes para o tráfego da aplicação e as métricas do Actuator. Você pode definir a propriedade management.server.port no arquivo application.properties para uma porta exclusiva. Além disso, configure regras de rede no Kubernetes (Network Policies) para permitir que apenas o pod do Prometheus tenha permissão de acesso a essa porta específica.

É possível criar alertas automáticos baseados nas métricas geradas pelo Actuator no Kubernetes?

Sim, você pode configurar o Alertmanager, que é o componente oficial do Prometheus para gerenciamento de alertas. Com ele, você define regras baseadas em PromQL para disparar notificações quando uma métrica ultrapassar limites aceitáveis. Por exemplo, é fácil criar uma regra para alertar seu time via Slack ou PagerDuty caso o uso de memória heap ultrapasse 85% por mais de 5 minutos seguidos.

Conclusão

Monitorar aplicações Java com Spring Boot Actuator no Kubernetes usando Prometheus é um passo fundamental para alcançar a maturidade operacional. Essa estratégia previne quedas inesperadas, melhora a alocação de recursos em nuvem e garante que sua equipe tenha total visibilidade do sistema. Acesse nossos conteúdos especializados sobre desenvolvimento Java no Meu Universo Nerd e comece a otimizar sua infraestrutura de microsserviços hoje mesmo!

Leia também