Health Checks em Microsserviços: Guia Passo a Passo
Health checks são essenciais para manter microsserviços confiáveis. Este guia mostra como implementá-los passo a passo, desde o conceito até a prática.
Health checks são essenciais para manter microsserviços confiáveis. Este guia mostra como implementá-los passo a passo, desde o conceito até a prática.
Health checks são a base para manter microsserviços confiáveis em produção. Eles permitem que orquestradores como Kubernetes saibam quando um serviço está saudável ou deve ser reiniciado. Sem eles, falhas se propagam silenciosamente pela cadeia de chamadas. Este guia mostra como implementar health checks em microsserviços passo a passo, do conceito à prática.
Antes de começar, você precisa de um serviço existente, de preferência com um framework que suporte endpoints HTTP (Spring Boot, Express, Go net/http). O resultado esperado é um endpoint /health que retorna status 200 ou 503, com informações sobre dependências.
Passo 1: Defina os tipos de health check
Existem dois tipos principais: liveness e readiness. Liveness indica se o processo está vivo e não em deadlock. Readiness indica se o serviço consegue receber requisições, ou seja, se dependências como banco de dados, cache ou filas estão acessíveis.
Dica: use liveness para reiniciar o processo, readiness para remover tráfego. Não confunda os dois, pois isso causa reinícios desnecessários ou tráfego para um serviço sem condições.
Erro comum: retornar apenas 200 sem verificar dependências. Isso esconde problemas reais.
Passo 2: Implemente o endpoint de liveness
O endpoint de liveness deve ser simples e sem dependências externas. Por exemplo, em Spring Boot, use o atuador com management.endpoint.health.probes.enabled=true. Em Node.js, um middleware que retorna {status: 'UP'}.
Dica: mantenha o liveness o mais leve possível. Se ele depender de banco, uma falha momentânea pode derrubar o serviço inteiro.
Passo 3: Implemente o endpoint de readiness
O readiness deve verificar cada dependência crítica. Em Spring Boot, use HealthIndicator para banco, fila, etc. Em Express, faça um Promise.all com pings para cada recurso.
Exemplo: verifique se o banco responde a um SELECT 1 e se a fila aceita conexão. Se qualquer um falhar, retorne 503.
Erro comum: checar dependências em todo request, causando lentidão. Faça com timeout curto, por exemplo, 2 segundos.
Passo 4: Exponha métricas e detalhes
Além do status, retorne informações úteis: versão do serviço, tempo de atividade (uptime), e o status de cada dependência. Isso facilita o debug quando um orquestrador marca o serviço como não saudável.
Dica: use um formato padrão como JSON com campos status, checks[] e timestamp.
Passo 5: Configure o orquestrador
No Kubernetes, defina livenessProbe e readinessProbe no deployment. Aponte para os endpoints criados, com initialDelaySeconds e periodSeconds adequados.
Exemplo de configuração: livenessProbe com httpGet: path: /health/live, readinessProbe com path: /health/ready. Não use o mesmo endpoint para ambos.
Erro comum: usar o mesmo endpoint para liveness e readiness. Isso impede que o Kubernetes diferencie reinício de remoção de tráfego.
Passo 6: Teste e monitore
Simule falhas: derrube o banco e veja se o readiness muda para 503. Reinicie o serviço e veja se o liveness responde. Monitore a taxa de sucesso dos probes no dashboard do Kubernetes.
Dica: automatize testes de health check no CI, chamando o endpoint após o deploy.
Checklist final
- Endpoint
/health/liveimplementado e leve. - Endpoint
/health/readyverificando dependências críticas. - Probes configurados no orquestrador com endpoints distintos.
- Métricas de status visíveis no dashboard.
- Testes de falha executados e documentados.
FAQ
O que é health check em microsserviços?
É um endpoint HTTP que informa se um serviço está operacional e pronto para receber requisições. Ele permite que orquestradores tomem ações automáticas, como reiniciar o serviço ou remover tráfego, com base no status retornado.
Qual a diferença entre liveness e readiness?
Liveness indica se o processo está vivo e sem deadlock. Readiness indica se o serviço consegue processar requisições, ou seja, se dependências estão acessíveis. Liveness deve ser simples; readiness pode ser mais complexo.
Como implementar health check em Spring Boot?
Use o Spring Boot Actuator. Habilite as probes com management.endpoint.health.probes.enabled=true e crie HealthIndicator personalizados para dependências. O endpoint /actuator/health retorna status agregado.
Health check precisa verificar banco de dados?
Sim, no readiness. Se o banco estiver fora, o serviço não deve receber tráfego. No liveness, evite checar banco para não causar reinícios desnecessários.
Posso usar o mesmo endpoint para liveness e readiness?
Não. Usar o mesmo endpoint impede que o orquestrador diferencie reinício de remoção de tráfego. Crie endpoints separados, como /health/live e /health/ready.
Como testar health checks?
Simule falhas nas dependências e verifique se o endpoint retorna 503. Use ferramentas como curl para chamar os endpoints e monitore os probes no orquestrador.
Com esses passos, seus microsserviços ficam mais resilientes e o orquestrador consegue agir com precisão. O próximo passo é adicionar alertas baseados nos status dos probes, para responder antes que o usuário perceba o problema.
Patrícia Lemos
Especialista em dados e analytics
Transforma painel cheio de número em decisão. Cuida de mensuração, dashboard e a métrica que de fato move o negócio.
Ver todos os artigos →