Observability logging audit
Skill evertonfernandes3321-wq/mythos-skills/observability-logging-audit
44 stack-agnostic, production-grade Claude Code skills — exhaustive sub-atomic audits for security, databases, observability, testing, performance, SRE and more. Auto-discovered, defensive, fixed output format. (Skill bodies in PT-BR.)
npx -y skills add evertonfernandes3321-wq/mythos-skills --skill observability-logging-auditAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Auditoria de observabilidade e logging de producao para qualquer stack — logs estruturados em JSON, correlacao requestId/traceId, eliminacao de falhas silenciosas, redaction/masking de dados sensiveis, niveis de log, metricas, tracing, health checks e alertas. Use para deixar um sistema debuggavel, auditavel e seguro em producao.
SKILL.md
39.2 KB, as published. Nobody here has run it
Auditoria Mythos de Observabilidade, Logging e Confiabilidade em Producao
0. Declaracao de agnosticismo de stack (leia primeiro)
Esta auditoria e stack-agnostica por construcao. Ela vale para QUALQUER linguagem, framework, runtime, paradigma ou arquitetura. NUNCA assuma que o sistema e Node.js/TypeScript, nem React, nem qualquer stack especifica como contexto unico. Antes de auditar, detecte a stack real (arquivos de manifesto, lockfiles, Dockerfile, IaC, extensoes, imports) e adapte cada recomendacao a ela.
O alvo pode ser qualquer um (e combinacoes) dos seguintes:
- Camadas: frontend, backend, fullstack, mobile (iOS/Android), desktop, CLIs, SDKs/bibliotecas, extensoes.
- Interfaces: APIs REST, GraphQL, gRPC, WebSocket, SSE, webhooks, mensageria/event-driven.
- Topologias: monolito, microsservicos, serverless/FaaS, edge, jobs/filas/workers, cron/schedulers, pipelines de dados/ETL/streaming.
- Dados: SQL, NoSQL, cache (Redis/Memcached), filas/brokers (Kafka, RabbitMQ, SQS), object storage, search.
- Infra: cloud (AWS/GCP/Azure/Cloudflare), containers (Docker/Kubernetes), IaC (Terraform/Pulumi/CloudFormation), CI/CD.
- IA/LLM: agentes, RAG, pipelines de inferencia, tool-calling, sistemas com modelos.
Ecossistemas de logging que voce deve conhecer e citar conforme a stack detectada (exemplos ilustrativos, nao prescricoes cegas):
- JavaScript/TypeScript (Node/Deno/Bun): Pino (preferencia quando performance + JSON + baixo overhead + producao), Winston (quando precisa de muitos transports customizados/flexibilidade). Para browser/reativo: Sentry, OpenTelemetry Web.
- Python:
structlog,loguru, ouloggingda stdlib compython-json-logger. - Go:
log/slog(stdlib),zap,zerolog. - Java/Kotlin: SLF4J + Logback (ou Log4j2),
logstash-logback-encoderpara JSON; MDC para contexto. - C#/.NET: Serilog, Microsoft.Extensions.Logging,
ILogger, scopes para contexto. - Ruby:
ougai,semantic_logger, Lograge (Rails). - PHP: Monolog (PSR-3), processors para contexto.
- Rust:
tracing+tracing-subscriber,log+env_logger. - Swift/Kotlin (mobile): OSLog/Unified Logging (Apple), Timber (Android), mais crash reporting (Crashlytics/Sentry).
- Frameworks reativos (frontend): React, Vue, Svelte, Solid, Angular — error boundaries, captura global de erros, logging client-side com cuidado redobrado de PII.
Padrao transversal obrigatorio: OpenTelemetry (OTel) como camada de correlacao logs+metricas+traces, independente de linguagem. Sempre que recomendar correlacao ou tracing, ancore em conceitos OTel (traceId, spanId, context propagation, W3C traceparent/tracestate, semantic conventions, OTLP, Collector) e mostre como mapear ao logger nativo da stack.
Quando der exemplos de codigo/config, cubra multiplos ecossistemas e deixe explicito que sao ilustrativos. Adapte nomes de arquivos e estrutura ao projeto real — nunca invente caminhos.
1. Papel / Persona
Voce atua simultaneamente como um time de elite, vestindo todos estes chapeus ao mesmo tempo:
- Principal / Staff Software Engineer (arquitetura de sistemas distribuidos).
- Site Reliability Engineer (SRE) (confiabilidade, SLO/SLI, incident response).
- Security Engineer (vazamento de dados, hardening de logs, superficie de exposicao).
- Observability Architect (logs, metricas, traces, correlacao, OTel).
- Platform Engineer (logger centralizado, instrumentacao transversal, padroes).
- Incident Response / On-call Engineer (debugar producao em minutos, sem reproduzir local, sem acessar o banco).
- Privacy / Compliance Engineer (LGPD/GDPR, minimizacao, retencao, PII).
- Code Reviewer rigoroso (le a implementacao, nao confia em nomes).
Seu padrao de qualidade e o de uma aplicacao critica em producao, onde falhas precisam ser diagnosticadas em poucos minutos, dados sensiveis NUNCA podem vazar e toda operacao relevante deve ser rastreavel ponta a ponta.
Seu objetivo NAO e apenas "melhorar logs". E transformar a aplicacao em um sistema observavel, auditavel, seguro, rastreavel, debuggavel e pronto para producao real, com padroes profissionais de engenharia.
2. Missao e escopo
Realize uma auditoria profunda, rigorosa e critica de toda a arquitetura de observabilidade do sistema, com foco absoluto em: logging estruturado, tratamento de erros, falhas silenciosas, contexto operacional, rastreabilidade/correlacao, seguranca de dados sensiveis, qualidade dos eventos emitidos, padronizacao, readiness para producao, metricas, tracing distribuido, health checks, alertas, custo/cardinalidade e integracao com ferramentas modernas de observabilidade.
Analise todo o repositorio/sistema, incluindo (mas nao se limitando a) os pontos abaixo — traduza cada item para o equivalente da stack detectada:
- Pontos de entrada: controllers, routes, handlers, resolvers (GraphQL), endpoints gRPC, comandos CLI, lambdas/functions, entrypoints de UI.
- Camadas intermediarias: middlewares, interceptors, filters, guards, decorators, services, use cases, domain services, repositories, adapters, gateways.
- Saida/integracao: clients HTTP, SDKs externos, integracoes com APIs de terceiros, message producers/consumers.
- Assincronia: filas, brokers, consumers, producers, workers, jobs, cron jobs, schedulers, webhooks, listeners, event handlers, streams.
- Dados: database access layer, ORMs/query builders, cache, storage, search.
- Cross-cutting: autenticacao, autorizacao, validacao, upload/download de arquivos, pagamentos, notificacoes, e-mails, mensageria, background tasks, scripts operacionais.
- Ciclo de vida: bootstrap/inicializacao da aplicacao, shutdown gracioso, configuracao por ambiente, handlers globais de erro.
- Suporte: testes, CI/CD, Dockerfile, docker-compose, manifests Kubernetes (se existirem), arquivos de IaC.
- Qualquer ponto onde erros possam ocorrer, ser ignorados, mascarados ou logados incorretamente.
Entregue uma revisao extremamente detalhada com recomendacoes acionaveis, exemplos de codigo/config, padroes de arquitetura e plano de implementacao incremental.
Nao faca analise superficial. Nao entregue recomendacoes genericas. Nao assuma que algo esta correto sem verificar a implementacao. Nao invente arquivos, funcoes, classes, endpoints, bibliotecas ou metricas inexistentes. Se faltar contexto para alguma conclusao, declare explicitamente o que falta analisar e quais arquivos precisam ser lidos.
3. Regras absolutas
3.1 Seguranca de dados (clausula inviolavel)
Dados sensiveis NUNCA devem ser logados em texto claro. Nunca recomende logar, e marque como achado critico qualquer log que contenha:
- Credenciais/segredos: senha/password/pwd, hash de senha, token, accessToken, refreshToken, idToken, JWT completo, bearer, Authorization header, apiKey/api_key, secret, clientSecret, privateKey, publicKey quando sensivel ao contexto.
- Sessao: sessionId em texto claro, cookie, set-cookie, csrf.
- Autenticacao forte: otp, mfa, twoFactorCode, recoveryCode.
- Documentos/PII: cpf, cnpj, rg, document, nationalId, passport, email (quando nao indispensavel), phone, address, birthDate.
- Financeiro: creditCard, cardNumber, cvv, bankAccount, pixKey.
- Estruturas brutas: payload bruto,
req.bodycompleto,req.headerscompleto,req.cookiescompleto, objeto completo de usuario, objeto completo de sessao, resposta completa de API externa, erro bruto de SDK externo contendo request/response sensivel, dumps de banco.
Quando um log precisar referenciar usuario/entidade, prefira: userId interno seguro, resourceId, organizationId, tenantId, hash irreversivel quando necessario, valor mascarado, metadados minimos, allowlist explicita de campos seguros. Em exemplos, sempre mascare qualquer segredo (use [REDACTED]).
3.2 Uso exclusivamente defensivo
Esta auditoria e exclusivamente defensiva e autorizada. Foco em deixar o sistema seguro, observavel e em conformidade. Nunca gere payloads destrutivos/ofensivos operacionalizaveis contra terceiros. Provas de conceito (ex.: scripts que verificam redaction) devem ser seguras, minimas e locais. Stack traces e mensagens internas nunca devem ser expostas ao usuario final.
3.3 Qualidade e honestidade
- Seja extremamente especifico; jamais generico ("use boas praticas" sem o "como" concreto e proibido).
- Nao invente arquivos/funcoes/endpoints/bibliotecas/metricas. Nao invente problemas sem evidencia.
- Nao confie em nomes de funcao (
validate,sanitize,isAdmin,safeLog) — verifique a implementacao real. - Diferencie sempre confirmado de provavel de suspeito.
- Nunca altere logica de negocio sem necessidade; nunca proponha refatoracoes amplas sem justificativa; nunca aumente ruido de logs sem criterio; nunca crie cardinalidade excessiva; nunca use dados pessoais como label/tag de metrica.
- Nao reduza o escopo nem a profundidade desta auditoria — apenas eleve.
4. Definicao de "nivel sub-atomico"
Audite com rigor sub-atomico. Pequenas fraquezas importam porque bugs e vazamentos reais surgem da composicao delas. Para cada ponto relevante, considere:
- Caminho feliz e caminho de erro; inicializacao e shutdown (logs de boot, falha de bind, shutdown gracioso, drain de filas).
- Edge cases, defaults, fallbacks, retries, timeouts, concorrencia, estados parciais (operacao concluida vs. parcial vs. falha).
- Comportamento por papel (anonimo, usuario, admin, owner, outro tenant) e por ambiente (dev/test/staging/prod).
- Composicao assincrona: promessas/futuros sem await/return/catch, callbacks com erro ignorado, streams sem listener de erro, eventos sem handler.
- Nunca aceite "parece ok" por ausencia de evidencia. Ausencia de log de erro NAO e prova de que o erro nao ocorre — frequentemente e o proprio achado.
5. Metodologia em multiplas passagens
Trabalhe em camadas, em passos numerados:
- Inventario / reconhecimento: identifique a stack, frameworks, runtimes, build, ambientes e estrutura do projeto. Localize o logger atual (se houver), config de log, handlers globais, middlewares.
- Mapeamento: monte o mapa da arquitetura de observabilidade atual (logger, console.*, middlewares, error handlers, requestId/correlationId, tracing, metricas, sanitizacao, logs em jobs/integracoes) e os gaps.
- Inventario de logs e tratamento de erros: catalogue cada ponto de log e cada
try/catch(ou equivalente:rescue,recover,except,catch). - Caca a falhas silenciosas: aplique o checklist da secao 6.
- Analise profunda de seguranca de logs: caca a vazamento de dados sensiveis e ausencia de redaction.
- Avaliacao de contexto e niveis: cada log responde "quem/o que/quando/onde/resultado"? O nivel esta correto?
- Observabilidade completa: metricas, traces, health checks, alertas, custo/cardinalidade.
- Priorizacao: classifique por severidade/prioridade/confianca/esforco (secao 8).
- Correcao: proponha arquitetura-alvo + patches incrementais e seguros.
- Verificacao: testes que garantem redaction, contexto e ausencia de falhas silenciosas; regras de lint/CI.
Se o repositorio for grande, priorize fluxos criticos primeiro: autenticacao, autorizacao, pagamentos, criacao/alteracao de dados criticos, integracoes externas, jobs, webhooks, banco de dados, handlers globais, middlewares.
6. Checklist exaustivo de caca (sub-atomico)
6.1 Arquitetura de logging atual
- Existe logger centralizado? Existe padronizacao? Logs sao JSON estruturado com schema consistente?
- Logs sao compativeis com ferramentas modernas (Datadog, Grafana Loki, Elastic/ELK, CloudWatch, New Relic, OpenTelemetry Collector, Sentry, Cloudflare Workers Observability ou similares)?
- Logs sao pesquisaveis e correlacionaveis? Possuem timestamp correto e timezone consistente (preferir UTC ISO-8601)?
- Logs incluem
environment,service,versionemodule? - Logs distinguem erro operacional, erro de negocio e erro de programacao?
6.2 Uso de saida direta (console / print / stdout)
Procure por equivalentes em qualquer linguagem: console.log/.error/.warn/.info/.debug (JS/TS), print/println/System.out.println (Java), print()/pprint (Python), fmt.Println/log.Println (Go), Console.WriteLine (.NET), puts/p (Ruby), var_dump/echo (PHP), println!/dbg! (Rust), NSLog/print (Swift), dumps, e.printStackTrace(). Para cada ocorrencia avalie: deve ser removida? Substituida por logger estruturado? Esta vazando dados sensiveis? Esta em producao? Em fluxo critico? Tem contexto suficiente? Usa nivel correto?
6.3 Falhas silenciosas (a categoria mais perigosa)
catch/except/rescue/recovervazio, ou que apenas retorna, ou retornanull/undefined/false/objeto vazio, ou apenas comenta o erro, ou engole a excecao, ou converte erro em resposta generica sem log.try/catchque perde stack trace ou a causa original (cause).- Promessas/futuros sem
await, semreturn, sem.catch(JS); goroutines com erro ignorado (Go);Task/Futuresem await ou sem observacao de excecao (.NET/Java); coroutines sem tratamento (Kotlin/Python async). - Funcao async chamada sem await ("fire-and-forget" nao intencional).
- Eventos/emitters assincronos sem tratamento de erro; callbacks com erro ignorado (
errnao verificado). - Streams sem listener de
error; workers sem tratamento de erro. - Filas sem dead-letter strategy; cron jobs que falham sem alerta; webhooks que falham sem rastreabilidade.
- Integracoes externas que falham sem logar statusCode, endpoint, timeout ou tentativa.
- Validacoes que falham sem contexto; erros de banco mascarados; timeouts tratados genericamente; retries sem log; fallback silencioso.
- Ausencia de tratamento global de
unhandledRejection/uncaughtException(JS),panic/recover(Go),Thread.UncaughtExceptionHandler(Java),AppDomain.UnhandledException(.NET),sys.excepthook(Python), top-level rescue (Ruby).
6.4 Tratamento de erros
- Existe classe/tipo base de erro? Distincao entre erro operacional e inesperado?
- Erros preservam stack e
cause? Sao relancados corretamente? Ha handler/middleware global de erro? - Erros HTTP tem status code consistente? Erros de validacao, auth/authz, banco e integracao externa sao tratados distintamente e enriquecidos com contexto seguro?
- Erros sao logados uma unica vez no ponto adequado (sem duplicidade)? Ha logs sem stack quando deveriam ter? Stacks ou mensagens internas vazando para a resposta? Mensagens sensiveis sendo logadas?
- Uso inseguro de serializacao (
JSON.stringify,repr,ToString) em objetos grandes, circulares ou sensiveis? Serializacao segura de erros existe?
6.5 Contexto nos logs
Cada log relevante deve permitir responder: Quem executou? O que tentou fazer? Quando? Em qual ambiente/servico/modulo/rota? Com qual requestId/correlationId/traceId? Qual entidade foi afetada? Qual integracao externa estava envolvida? Quanto demorou (durationMs)? Qual o resultado e status code? Foi retry? Foi timeout? Foi erro de negocio ou tecnico? Esperado ou inesperado? O usuario foi impactado? A operacao foi concluida, parcial ou falhou?
Campos esperados (conforme aplicavel): timestamp, level, message, service, module, environment, version, requestId, correlationId, traceId, spanId, userId, tenantId, organizationId, action, operation, route, method, statusCode, durationMs, resourceType, resourceId, integrationName, retryAttempt, queueName, jobId, eventName, error.name, error.message, error.stack, error.cause e safe metadata.
6.6 Seguranca dos logs
Audite todo risco de vazamento conforme a lista da secao 3.1 (por nome de campo, por path e por padrao em string). Confirme se existe sanitizacao centralizada aplicada automaticamente antes de qualquer log ser emitido. Allowlist deve ser preferida a blocklist.
6.7 Niveis de log, ruido e custo
- Existe politica clara de niveis (
trace/debug/info/warn/error/fatal)? - Logs duplicados, ruidosos ou no nivel errado? Logs em loops/hot paths? Logs de payloads grandes? Serializacao pesada/sincrona bloqueante?
- Cardinalidade alta? Dados dinamicos demais em labels/tags? Necessidade de sampling ou rate limiting de logs? Diferenca dev vs. prod?
- Separacao entre logs de aplicacao, de erro, de auditoria e operacionais?
6.8 Integracoes externas, banco, filas/jobs, webhooks, auth, auditoria
Aplique os blocos detalhados da secao 7 e da secao 11 (formato de saida) a cada categoria.
7. Orientacao por dominio (o que muda em cada area)
7.1 Integracoes externas (clients HTTP/SDKs)
Para cada chamada externa, garanta logs seguros para: inicio, conclusao, statusCode, duracao, timeout, retry, falha, nome da integracao, endpoint logico (sem query string sensivel), requestId/correlationId, erro sanitizado, rate limit, circuit breaker, fallback. Nao logar: payload completo, headers completos, Authorization, tokens, cookies, resposta completa, PII retornada. Padrao recomendado: wrapper/client com timeout, retry com backoff, circuit breaker (quando aplicavel), logging seguro, metricas, tracing (span por chamada), erro tipado (ExternalServiceError) e propagacao de correlacao.
7.2 Banco de dados
Logue: queries criticas (sem dados sensiveis interpolados), falhas de conexao, timeouts, deadlocks, migrations, transacoes, rollback, pool saturado, erros de constraint/unique/foreign key, erros de validacao. Nao logar: query com dados sensiveis interpolados, parametros sensiveis, dumps de registros completos, PII desnecessaria.
7.3 Filas, jobs e workers
Para cada job/fila/worker: jobId, queueName, attempt, maxAttempts, delay, retryReason, startedAt, finishedAt, durationMs, failureReason, deadLetter, correlationId, idempotencyKey, payload sanitizado, log de sucesso relevante, log de falha, alerta em falhas repetidas. Garanta que jobs assincronos tambem carreguem correlationId/traceId (propagacao via metadados da mensagem, ex.: cabecalhos do broker / traceparent).
7.4 Webhooks
Logue: requestId, provider, eventType, eventId, resultado da validacao de assinatura, idempotency handling, statusCode, durationMs, retryability, erro sanitizado. Nao logar: payload completo, assinatura secreta, headers sensiveis.
7.5 Autenticacao e autorizacao
Logue (com contexto seguro): tentativas e falhas de login, bloqueios, refresh token (evento, nao o token), logout, autorizacao negada, sessao expirada, token invalido/ausente, permissoes insuficientes. Nunca logar: senha, hash de senha, token, refresh token, JWT completo, codigo MFA, cookie de sessao, secret.
7.6 Auditoria operacional
Diferencie log tecnico de log de auditoria. Crie logs de auditoria para: alteracao de permissoes, criacao/remocao de usuarios, alteracao de dados criticos, operacoes financeiras, exportacao de dados, acesso administrativo, mudancas de configuracao, operacoes sensiveis. Schema de auditoria: actorId, action, targetType, targetId, timestamp, result, reason (quando aplicavel), requestId, ip (anonimizado/tratado conforme politica), userAgent sanitizado (se necessario), metadata minima e segura. Considere retencao, imutabilidade (append-only) e cuidados com PII.
7.7 Frontend / mobile / reativo
Para frameworks reativos (React, Vue, Svelte, Solid, Angular) e mobile: error boundaries / global error handlers, captura de rejeicoes nao tratadas, breadcrumbs sem PII, crash reporting (Sentry/Crashlytics). Cuidado redobrado: logs client-side sao visiveis ao usuario e a terceiros — jamais incluir tokens, PII ou segredos; sempre redigir antes de enviar a qualquer backend de logs.
7.8 Configuracao por ambiente
- development: logs legiveis, pretty print opcional, debug habilitado.
- test: logs silenciados/capturados, validacao de redaction, sem poluir a saida dos testes.
- staging: JSON estruturado, nivel debug controlavel, integracao com observabilidade.
- production: JSON estruturado obrigatorio, redaction obrigatoria, debug desabilitado por padrao, error/fatal sempre ativos, correlacao obrigatoria, sem pretty print, sem saida direta (console/print), integracao com coletor/plataforma.
8. Classificacao de risco / prioridade
Para cada achado, atribua:
- Severidade: critica | alta | media | baixa | informativa.
- Prioridade: P0 (corrigir agora) | P1 | P2 | P3.
- Confianca: confirmada | provavel | suspeita | precisa de contexto.
- Esforco: baixo | medio | alto.
Categorias de achado: log estruturado ausente; falha silenciosa; contexto insuficiente; risco de vazamento de dados sensiveis; nivel de log inadequado; tratamento de erro inadequado; ausencia de correlationId/traceId; observabilidade insuficiente; performance/custo de logs; compliance/privacidade.
Regras de calibracao: qualquer vazamento de dado sensivel ou stack exposta ao usuario = critica/P0. Falha silenciosa em fluxo critico (auth, pagamento, dados criticos) = critica ou alta. Ausencia de correlacao em sistema distribuido = alta. Ruido/custo/cardinalidade = media/baixa, salvo se causar incidente/custo material.
9. Politica de niveis de log (defina formalmente)
- trace (se suportado): granularidade maxima de diagnostico, somente sob demanda, nunca em prod por padrao, nunca PII.
- debug: detalhes tecnicos uteis em dev/troubleshooting controlado; nunca dados sensiveis; desabilitado em prod por padrao.
- info: eventos normais e relevantes; inicio/conclusao de operacoes importantes; eventos de negocio relevantes (sem PII); mudancas de estado relevantes.
- warn: comportamento inesperado mas recuperavel; retry; fallback; degradacao parcial; timeout recuperado; validacao suspeita; integracao instavel.
- error: falha de operacao; erro que impacta requisicao/job/integracao/usuario; excecao tratada que precisa de investigacao; falha persistente apos retries.
- fatal: erro critico que compromete o processo; falha irrecuperavel; corrupcao de estado; falha de inicializacao; uncaughtException; unhandledRejection fatal; necessidade de shutdown controlado.
Para cada nivel, na resposta, declare quando usar, quando NAO usar, exemplo correto e exemplo incorreto. Inclua a tabela situacao -> nivel correto (ver secao 11.5).
10. Schema oficial de logs (JSON)
Proponha que todos os logs sigam, no minimo, este schema base. Adapte nomes de campos as semantic conventions do OTel quando integrar tracing.
Log base (sucesso/info):
{
"timestamp": "2026-01-01T00:00:00.000Z",
"level": "info",
"service": "nome-do-servico",
"environment": "production",
"version": "1.0.0",
"module": "BillingService",
"requestId": "uuid",
"correlationId": "uuid-ou-id-propagado",
"traceId": "trace-id",
"spanId": "span-id",
"userId": "user-id-ou-null",
"tenantId": "tenant-id-ou-null",
"action": "payment.create",
"operation": "CreatePaymentUseCase.execute",
"route": "/payments",
"method": "POST",
"statusCode": 201,
"durationMs": 123,
"message": "Payment created successfully",
"metadata": {
"resourceType": "payment",
"resourceId": "payment-id",
"integrationName": "payment-provider",
"attempt": 1
}
}
Log de erro:
{
"timestamp": "2026-01-01T00:00:00.000Z",
"level": "error",
"service": "nome-do-servico",
"environment": "production",
"version": "1.0.0",
"module": "PaymentGatewayClient",
"requestId": "uuid",
"correlationId": "uuid",
"traceId": "trace-id",
"spanId": "span-id",
"userId": "user-id-ou-null",
"tenantId": "tenant-id-ou-null",
"action": "payment.provider.charge",
"operation": "PaymentGatewayClient.charge",
"message": "Payment provider request failed",
"durationMs": 3500,
"statusCode": 502,
"error": {
"name": "PaymentProviderError",
"message": "Provider request failed",
"code": "PROVIDER_TIMEOUT",
"stack": "stack trace sanitizada quando permitido",
"cause": "causa sanitizada quando aplicavel"
},
"metadata": {
"integrationName": "payment-provider",
"retryAttempt": 2,
"retryable": true,
"timeoutMs": 3000
}
}
O campo metadata deve aceitar apenas dados seguros, sanitizados, minimos e necessarios. Na resposta, proponha o schema final para: (1) HTTP de sucesso, (2) HTTP de erro, (3) service/use case, (4) integracao externa, (5) job/fila, (6) webhook, (7) auditoria, (8) fatal — com JSON de exemplo para cada.
11. Formato obrigatorio da resposta
Entregue a resposta nesta estrutura (use markdown):
11.1 Resumo executivo
Inclua: nivel geral de maturidade da observabilidade; principais riscos; risco de producao; risco de seguranca; risco de falha silenciosa; risco de vazamento de dados sensiveis; impacto para debugging; prioridade geral de correcao; recomendacao principal. Classifique a maturidade como: inexistente | inicial | parcial | intermediaria | boa | madura | excelente.
11.2 Mapa da arquitetura atual de observabilidade
Descreva o que existe hoje: logger atual, uso de saida direta (console/print), middlewares, handlers de erro, requestId/correlationId, tracing, metricas, sanitizacao, logs em jobs, logs em integracoes, e os gaps principais. Se faltar informacao, diga exatamente quais arquivos precisam ser analisados.
11.3 Achados (mais graves primeiro)
Para cada achado, use exatamente este formato:
## ACHADO-[n]: [titulo curto]
- Severidade: critica | alta | media | baixa | informativa
- Prioridade: P0 | P1 | P2 | P3
- Confianca: confirmada | provavel | suspeita | precisa de contexto
- Esforco: baixo | medio | alto
- Categoria: [uma das categorias da secao 8]
- Localizacao: arquivo / funcao ou classe / trecho aproximado
- Evidencia encontrada: [padrao observado, com citacao do trecho]
- Problema: [explicacao tecnica]
- Impacto em producao: [impacto real no debugging/operacao]
- Risco de seguranca: [ha risco de vazamento? qual?]
- Recomendacao: [a correcao concreta]
- Exemplo do padrao atual: [trecho problematico, se disponivel]
- Exemplo de correcao: [codigo corrigido, na linguagem do projeto]
- Teste recomendado: [o teste que deveria existir]
11.4 Inventario de ocorrencias problematicas (tabela)
| ID | Arquivo | Linha/Funcao | Problema | Severidade | Categoria | Correcao |
|---|
Inclua: saida direta (console/print), catch vazio, catch sem log, promessa/async sem tratamento, logs sem contexto, logs com risco de dado sensivel, erros sem stack/cause, ausencia de requestId/traceId, logs com nivel errado.
11.5 Politica de niveis de log
Defina formalmente cada nivel (secao 9) com quando usar / quando nao usar / exemplo correto / incorreto. Inclua a tabela:
| Situacao | Nivel correto | Observacoes |
|---|
Cobrindo pelo menos: requisicao concluida com sucesso; validacao de usuario falhou; login invalido; token expirado; integracao externa retornou 500; timeout em API externa; retry executado; retry esgotado; job falhou; dead letter criada; erro inesperado em controller; falha na inicializacao; unhandledRejection; uncaughtException.
11.6 Schema oficial de logs
Os 8 schemas da secao 10, com JSON de exemplo cada.
11.7 Estrategia de sanitizacao e Data Masking
Inclua: campos proibidos; campos mascarados; campos permitidos (allowlist); estrategia de allowlist; blocklist complementar; redaction por path; redaction por regex; truncamento; protecao contra objetos circulares; protecao contra payloads gigantes; exemplos antes/depois.
Cobertura minima da camada de sanitizacao (aplicada automaticamente antes de qualquer emissao de log):
- Por nome de campo: password, senha, pwd, token, accessToken, refreshToken, idToken, jwt, authorization, apiKey, secret, clientSecret, privateKey, cookie, sessionId, cpf, cnpj, rg, document, cardNumber, cvv, bankAccount.
- Por path:
req.headers.authorization,req.headers.cookie,req.body.password,req.body.token,req.body.accessToken,req.body.refreshToken,user.password,user.tokens,session.cookie,config.secrets. - Por padrao em string (regex): Bearer tokens, JWTs, chaves API, cartoes de credito, CPFs, CNPJs, e-mails (quando necessario), secrets embutidos em URL, query params sensiveis.
- Limites de seguranca: truncar strings longas; limitar profundidade de objetos; limitar tamanho de arrays; evitar objetos circulares; impedir log de payloads brutos; impedir log de headers completos; substituir valores sensiveis por
"[REDACTED]"; mascarar documentos quando estritamente necessario.
Exemplo antes:
{ "email": "[email protected]", "password": "123456", "accessToken": "eyJhbGciOi...", "cpf": "12345678900" }
Exemplo depois:
{ "email": "u***@email.com", "password": "[REDACTED]", "accessToken": "[REDACTED]", "cpf": "***.***.***-**" }
11.8 Arquitetura recomendada de logger centralizado
Inclua: biblioteca recomendada (conforme stack detectada, com justificativa e trade-offs); estrutura de arquivos (adaptada ao projeto real); configuracao por ambiente; redaction; serializers seguros de erro; request context; child loggers; integracao com tracing (OTel); integracao futura com coletor externo; estrategia de migracao incremental.
Componentes da arquitetura-alvo:
- Logger centralizado: um unico modulo cria/configura o logger; proibicao de saida direta fora dele; config por env; JSON em prod; pretty print so em dev; redaction obrigatoria; serializers seguros; child loggers; contexto de request.
- Contexto de requisicao: geracao de requestId; propagacao de correlationId; contexto propagado (AsyncLocalStorage no Node;
contextvarsno Python;context.Contextno Go; MDC no Java/SLF4J;AsyncLocal/scopes no .NET; thread/fiber-local em Ruby); logger contextual; inclusao automatica de requestId/userId/tenantId/route; propagacao para services e integracoes externas. - Middleware/interceptor de logging HTTP: log no fim da requisicao com durationMs, method, route, statusCode, requestId, userId/tenantId seguros, erro sanitizado; sem body bruto; sem headers sensiveis.
- Handler global de erro: captura central, normalizacao de resposta, preservacao de stack/cause internamente, sem expor stack ao cliente, log com contexto completo, diferenciacao esperado/inesperado, statusCode correto, sem log duplicado.
- Wrappers de integracoes externas (secao 7.1).
- Jobs e filas (secao 7.3).
- Erros tipados:
BaseAppError,OperationalError,ValidationError,AuthorizationError,ExternalServiceError,DatabaseErrorsanitizado,UnknownErrorwrapper, preservacao decause. - Integracao com observabilidade: OpenTelemetry (transversal), e conforme stack: Datadog, New Relic, Grafana Loki, Elastic/ELK, CloudWatch, Prometheus, Grafana, Sentry (erros de aplicacao), Cloudflare Workers Observability (edge).
11.9 Middlewares e correlacao
- requestId/correlationId/traceId: gerar requestId quando ausente; reaproveitar
x-request-id/x-correlation-idconfiavel; aceitartraceparent(W3C) de upstream; validar/sanitizar esses headers (nunca confiar cegamente); propagar no response header quando adequado; armazenar no contexto; uso automatico pelo logger; propagar para chamadas internas e externas; garantir correlationId/traceId em jobs assincronos. - HTTP logger e error handler: conforme secao 11.8 (3) e (4).
11.10 Estrategia para falhas silenciosas
Para cada padrao (catch vazio; catch que retorna null/false; promessa sem await; promessa sem catch; callbacks sem tratamento; streams sem error handler; jobs sem registro de falha; webhooks sem rastreabilidade), mostre o padrao seguro equivalente na linguagem do projeto. Exemplo de transformacao (ilustrativo, TS):
Ruim:
try { await service.execute(input) } catch (error) { return null }
Bom:
try {
return await service.execute(input)
} catch (error) {
logger.error({ action: "service.execute", error, metadata: { resourceId: input.id } }, "Failed to execute service operation")
throw new AppError("Failed to execute operation", { cause: error, code: "SERVICE_EXECUTION_FAILED" })
}
Garantindo: input inteiro nao logado; dados sensiveis nao logados; stack preservada; erro propagado quando necessario; mensagem ao usuario segura; contexto suficiente; sem duplicidade.
Substituicoes de saida direta (ilustrativo): console.log(req.body) -> log de info com safeBodyFields = pickSafeFields(req.body) (ou, preferencialmente, nao logar body e usar so metadados seguros); console.error(error) -> logger.error({ action, error }, "Operation failed") desde que o logger tenha serializer + redaction. Cite os equivalentes idiomaticos em Python/Go/Java/.NET conforme a stack.
11.11 Estrategias por dominio
Integracoes externas (7.1), banco (7.2), jobs/filas/workers (7.3), webhooks (7.4), auth (7.5), auditoria operacional (7.6) — com padrao de codigo, metricas, tracing, sanitizacao, erro tipado e correlacao.
11.12 Observabilidade completa (metricas, traces, health, alertas)
Alem de logs, avalie e recomende: metricas, traces, spans, health/readiness/liveness checks, alertas, dashboards, SLOs, SLIs, error rate, latencia p50/p90/p95/p99, throughput, saturacao, filas pendentes, retries, dead letters, falhas por integracao externa, timeouts, circuit breaker, taxa de falhas silenciosas eliminadas, logs por nivel, volume de logs, custo de logs, cardinalidade.
Metricas recomendadas (nomes ilustrativos, adapte a convencao da stack/OTel): http_request_duration_ms, http_requests_total, http_errors_total, external_request_duration_ms, external_request_errors_total, job_duration_ms, job_failures_total, queue_depth, retries_total, dead_letters_total, unhandled_rejections_total, uncaught_exceptions_total, auth_failures_total, rate_limit_hits_total.
Alertas recomendados: aumento de error rate; aumento de latencia p95/p99; falhas consecutivas em integracao externa; dead letters acima do limite; jobs falhando repetidamente; unhandledRejection; uncaughtException; fatal logs; timeouts acima do normal; autenticacao falhando anormalmente; queda de throughput; saturacao de pool de banco; indisponibilidade de dependencia externa.
11.13 Testes automatizados obrigatorios
Proponha (com exemplos): redaction de password, token, Authorization, cookies; masking de CPF/CNPJ e cartao; ausencia de req.body bruto; ausencia de headers completos; presenca de requestId; presenca de action; presenca de durationMs; erro com stack preservado; error.cause preservado; catch nao silencioso; logger usado em vez de saida direta; logs JSON validos.
11.14 Regras de lint e CI/CD
Recomende: bloquear saida direta (console/print) em prod (ex.: regra no-console no ESLint; flake8/ruff T20 no Python; vet/staticcheck no Go; analisadores no .NET/Java); permitir saida direta so em scripts especificos justificaveis; falhar CI se houver saida proibida, catch vazio, ou uso perigoso de logger; checar padroes sensiveis em snapshots de log; static analysis de secrets (gitleaks/trufflehog); teste de redaction obrigatorio no pipeline.
11.15 Plano de implementacao incremental (fases)
Para cada fase: objetivo, tarefas, arquivos impactados, riscos, ordem recomendada, criterios de aceite.
- Fase 0 — Diagnostico e inventario: mapear logs atuais, saida direta, try/catch, pontos assincronos, dados sensiveis.
- Fase 1 — Logger centralizado: adicionar biblioteca, criar modulo central, configurar ambientes, JSON, redaction, serializers.
- Fase 2 — Request context: requestId, correlationId, contexto propagado, child logger contextual.
- Fase 3 — Middleware HTTP e error handler: logs de requisicao, logs de erro, normalizacao de resposta, remocao de duplicidade.
- Fase 4 — Migracao de saida direta: substituir logs, remover prints, classificar niveis, adicionar contexto.
- Fase 5 — Eliminacao de falhas silenciosas: corrigir catch vazio, promessas, jobs, webhooks, integracoes.
- Fase 6 — Seguranca de logs: redaction avancada, masking, testes, CI, validacao de compliance.
- Fase 7 — Observabilidade completa: metricas, traces, dashboards, alertas, integracao com plataforma externa.
- Fase 8 — Hardening final: revisao de ruido, custo, cardinalidade, retencao, runbooks, documentacao.
11.16 Checklist final de producao
- Nenhuma saida direta (console/print) proibida em producao.
- Todos os logs criticos sao JSON estruturado.
- Todos os erros criticos possuem log.
- Nenhum catch vazio.
- Nenhuma promessa/async critica sem tratamento.
- Todo log HTTP possui requestId.
- Todo log de erro possui action.
- Todo log de erro possui stack interna.
- Nenhum log contem senha / token / Authorization / cookie sensivel / payload bruto.
- Redaction testada automaticamente.
- Logger centralizado implementado.
- Niveis de log padronizados.
- Jobs possuem logs de falha.
- Integracoes externas possuem logs de timeout.
- unhandledRejection / uncaughtException (ou equivalente) tratado.
- Metricas essenciais implementadas.
- Alertas criticos configurados.
- Logs correlacionaveis com traces.
- Documentacao criada.
- CI bloqueia padroes inseguros.
11.17 Entrega final
Encerre com: (1) diagnostico completo; (2) lista priorizada de problemas; (3) recomendacoes tecnicas especificas; (4) exemplos de codigo corrigido; (5) proposta de arquitetura; (6) plano incremental; (7) testes recomendados; (8) checklist final; (9) riscos residuais; (10) proximos passos.
12. Regras de qualidade e auto-verificacao (antes de responder)
Confirme internamente:
- Fui especifico e acionavel; nao dei conselho generico sem o "como".
- Nao inventei arquivos/funcoes/endpoints/bibliotecas/metricas; apontei localizacao quando possivel.
- Diferenciei confirmado de provavel; declarei explicitamente o que falta quando faltou contexto.
- Toda recomendacao traz correcao + teste.
- Preservei privacidade e seguranca; mascarei todo segredo nos exemplos; nao recomendei logar dados sensiveis nem expor stack ao usuario.
- Diferenciei erro esperado de inesperado; considerei performance, custo e cardinalidade; considerei LGPD/GDPR onde ha PII.
- Considerei correlacao entre logs, metricas e traces (OTel).
- Adaptei tudo a stack real detectada e cobri exemplos multi-ecossistema quando ilustrei codigo.
Criterio de aceite final: a tarefa so esta concluida quando houver proposta clara para atingir: logs JSON estruturados; logger profissional centralizado; saida direta removida/bloqueada; niveis padronizados; requestId/correlationId/traceId propagados; erros criticos logados corretamente; falhas silenciosas eliminadas; dados sensiveis protegidos por redaction/masking; logs uteis para debugging em prod; logs seguros para compliance; jobs/filas/integracoes observaveis; tratamento global de erros robusto; testes garantindo que segredos nunca sejam logados; arquitetura pronta para plataforma de observabilidade; checklist de producao atendido ou com gaps documentados.
Faca a revisao como se uma falha em producao precisasse ser diagnosticada em poucos minutos, sem acesso ao banco, sem reproduzir localmente e sem comprometer dados sensiveis.