Bugs em produção diferem de falhas locais: a forma do tráfego, o volume de dados e a configuração do ambiente escondem problemas que seu laptop nunca vê. Logs estruturados, traces distribuídos, gdb/lldb e tokio-console fecham essa lacuna sem reinícios arriscados.
# Inspeção de tarefas async em tempo real (habilite tokio_unstable + console subscriber em staging)RUSTFLAGS="--cfg tokio_unstable" cargo run --features console# Anexe o depurador a um binário em execução (precisa de símbolos de depuração na imagem)lldb -p $(pgrep orders-api)(gdb) thread apply all bt
Quando recorrer a isso:
Taxa de erro aumenta sem correlação óbvia com deploy
Latência cresce, mas CPU parece ociosa (tarefas bloqueadas ou espera de I/O)
O problema aparece apenas para um tenant ou região
Reprodução local falha após combinar versão do Rust e variáveis de ambiente
// Dependências do Cargo.toml (serviço Axum típico)// tracing, tracing-subscriber, tracing-opentelemetry// tower-http com TraceLayer para IDs de requisição HTTP
Conecte TraceLayer no Axum para que cada requisição HTTP receba um trace_id propagado para spans downstream e linhas de log.
Símbolos de depuração removidos na imagem de produção - lldb mostra ???. Correção: Envie um pacote de símbolos de depuração separado ou uma build com -g dividida para a equipe de plantão.
Logging em debug em produção - Explosão de disco e custo. Correção:RUST_LOG dinâmico via env, padrão info.
Bloqueio em handler async - std::fs::read em uma thread worker do Tokio trava todas as tarefas nessa thread. Correção:tokio::task::spawn_blocking.
Span ausente no pool sqlx - Tempo do DB invisível. Correção: Habilite o recurso de tracing do sqlx e a instrumentação do pool.
Hotfix sem tag de SHA do deploy - Não é possível correlacionar regressão. Correção: Registre GIT_SHA na inicialização e em cada relatório de erro.