0Pricing
Go Academy · Aula

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: 5

Ajuste 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 MiB

Ajuste 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 GC

Ajuste 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

  1. Builds Docker em várias etapas para Go
  2. Configuração de ambiente e secrets
  3. Docker Compose para desenvolvimento local
  4. Verificações de saúde e ajustes para produção
← Voltar para Go Academy