Verificações de saúde e ajustes para produção
HEALTHCHECK, tini e tratamento de sinais em contêineres
Verificações de saúde e ajustes para produção é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.
Endpoints de verificação de integridade
Um endpoint de verificação de integridade permite que balanceadores de carga e orquestradores verifiquem se o serviço está ativo e pronto para atender ao tráfego. Há dois tipos comuns: atividade (está em execução?) e prontidão (pode atender a solicitações?).
Endpoint de atividade
Retorna 200 OK se o processo estiver ativo. Um manipulador simples que sempre é aprovado — basta que o processo esteja em execução:
mux.HandleFunc("/healthz/live", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})Endpoint de prontidão
Retorna 200 somente quando o serviço está pronto (conectado ao banco de dados, com o cache aquecido e as migrações concluídas). Retorna 503 durante a inicialização ou em um estado degradado:
mux.HandleFunc("/healthz/ready", func(w http.ResponseWriter, r *http.Request) {
if err := db.PingContext(r.Context()); err != nil {
w.WriteHeader(http.StatusServiceUnavailable); return
}
w.WriteHeader(http.StatusOK)
})Sondas do Kubernetes
Configure as sondas de atividade e prontidão na especificação de Deployment do Kubernetes:
livenessProbe:
httpGet: { path: /healthz/live, port: 8080 }
initialDelaySeconds: 5
periodSeconds: 10
readinessProbe:
httpGet: { path: /healthz/ready, port: 8080 }
initialDelaySeconds: 3
periodSeconds: 5Ajuste de GOMAXPROCS
Em contêineres, GOMAXPROCS usa por padrão a quantidade de CPUs do host, não o limite de CPU do contêiner. Use go.uber.org/automaxprocs para defini-lo corretamente com base nos limites do cgroup.
import _ "go.uber.org/automaxprocs"Limites de memória
Defina GOMEMLIMIT (Go 1.19+) como o limite de memória do contêiner, permitindo que o GC use a memória de forma mais agressiva antes que o mecanismo de encerramento por OOM seja acionado:
import "runtime/debug"
debug.SetMemoryLimit(512 * 1024 * 1024) // 512 MiBAjuste do GC
Defina GOGC para controlar a frequência do GC. O padrão é 100 (o GC é executado quando a memória dinâmica dobra). Valores menores reduzem o uso de memória ao custo de execuções mais frequentes do GC; valores maiores trocam mais memória por menos execuções do GC.
os.Setenv("GOGC", "200") // allow heap to grow 2× before GCAjuste do pool de conexões
Defina limites do pool de conexões do banco de dados adequados aos limites de recursos do contêiner e a max_connections do banco de dados:
db.SetMaxOpenConns(25)
db.SetMaxIdleConns(10)
db.SetConnMaxLifetime(5 * time.Minute)Exposição de métricas
Exponha métricas do Prometheus em uma porta separada (não a porta principal da API) para evitar o vazamento de dados internos para clientes externos:
go func() {
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":9090", nil)
}()Encerramento controlado no Kubernetes
Defina terminationGracePeriodSeconds na especificação do pod para permitir tempo suficiente para o tempo limite de encerramento. Retorne 503 imediatamente pela sonda de prontidão quando SIGTERM for recebido.
Criação de perfis em produção
Ative o pprof em uma porta não pública com autenticação. Nunca o exponha publicamente — ele revela o estado interno e pode ser usado para causar uma negação de serviço.
Verificação rápida
Por que GOMAXPROCS deve ser definido com base nos limites de CPU do contêiner, e não nas CPUs do host?
Recapitulação: verificações de integridade e ajustes para produção
Pontos principais:
- Atividade: processo ativo; Prontidão: o serviço pode atender ao tráfego
- automaxprocs define GOMAXPROCS com base nos limites de CPU do contêiner
- GOMEMLIMIT evita encerramentos por OOM; GOGC ajusta a frequência do GC
- Exponha métricas em uma porta separada, disponível apenas internamente
Perguntas Frequentes
A aula “Verificações de saúde e ajustes para produção” é grátis?
Sim — o texto completo de “Verificações de saúde e ajustes para produção” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.
O que vou aprender em “Verificações de saúde e ajustes para produção”?
HEALTHCHECK, tini e tratamento de sinais em contêineres Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Go Academy?
Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Verificações de saúde e ajustes para produção”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Go Academy?
Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Builds Docker em várias etapas para Go
- Configuração de ambiente e secrets
- Docker Compose para desenvolvimento local
- Verificações de saúde e ajustes para produção