Observability
Introdução ao documento
Este documento descreve os sinais de observabilidade comprovados no repositório e as recomendações operacionais que podem ser derivadas deles sem inventar ferramentas externas. O foco está em logs, probes, métricas expostas pelo próprio app, RUM de frontend e pontos reais de inspeção.
Fato observado
- O app expõe
health,readinesseliveness. - O runtime registra eventos por
console.log,console.warneconsole.error. - O frontend inicializa Datadog RUM e o layout também injeta Meta Pixel em produção.
Evidências:
../../pages/api/health.ts#L20-L108../../pages/api/readiness.ts#L8-L83../../pages/api/liveness.ts#L8-L31../../app/components/DatadogInit.tsx#L8-L29../../app/layout.tsx#L36-L60
Versionamento
Este documento deve ser atualizado quando houver mudança em:
- formato e origem dos logs;
- endpoints de saúde e probes do Helm;
- SDKs de observabilidade no frontend;
- variáveis de ambiente de telemetria;
- regras operacionais recomendadas para alertas.
Evidências:
../../src/common/util/fetchWithTimeout.ts#L21-L59../../app/components/DatadogInit.tsx#L8-L29../../app/api/envs/route.ts#L4-L20../../helm/templates/deployment.yaml#L53-L76
Referencial teórico
Este documento usa apenas sinais que o código ou a infra local realmente expõem:
- probes HTTP do próprio app;
- logs de stdout/stderr gerados pelos handlers e adapters;
- RUM client-side inicializado por código do repositório;
- logs de pipeline GitHub Actions.
Inferência controlada
- Como não há dashboards ou alertas versionados aqui, as recomendações abaixo são propostas operacionais derivadas dos sinais existentes, não um retrato de configuração já implantada.
Evidências:
../../.github/workflows/ci-cd-pipeline.yaml#L15-L57../../pages/api/health.ts#L39-L68../../src/common/util/fetchWithTimeout.ts#L23-L25../../app/components/DatadogInit.tsx#L12-L25
Padrão de logs
Formato observado
Fato observado
- O repositório não usa logger estruturado dedicado nem saída JSON padronizada.
- O padrão predominante é
console.error/console.warn/console.logcom prefixos textuais.
Evidências:
../../src/common/util/fetchWithTimeout.ts#L25-L26../../src/common/util/fetchWithTimeout.ts#L49-L55../../pages/api/auth/[...nextauth].ts#L17-L22../../pages/api/auth/[...nextauth].ts#L51-L55../../pages/api/auth/[...nextauth].ts#L113-L123../../middleware.ts#L30-L33
Prefixos relevantes
| Prefixo / padrão | Origem observada | Uso operacional |
|---|---|---|
[HTTP Timeout] | fetchWithTimeout | detectar integração externa lenta ou travada |
[HTTP] ERROR ... | fetchWithTimeout | detectar falha de rede ou abort |
[API] <status> ... | adapters externos | detectar erro de backend por integração |
[Auth] ... | NextAuth | detectar sobrecarga e timeout de autenticação |
[Health] System stuck... | /api/health | detectar degradação severa do processo |
[Middleware Error] ... | middleware.ts | detectar erro ao consultar modo manutenção |
Evidências:
../../src/common/util/fetchWithTimeout.ts#L23-L26../../src/common/util/fetchWithTimeout.ts#L49-L55../../src/features/api/external/wp/getMaintenanceMode/getMaintenanceMode.ts#L22-L29../../src/features/api/external/whats/sendFlowTemplate/sendFlowTemplate.ts#L33-L35../../pages/api/auth/[...nextauth].ts#L49-L56../../pages/api/auth/[...nextauth].ts#L109-L124../../pages/api/health.ts#L87-L101../../middleware.ts#L30-L33
Healthchecks
Endpoints expostos pelo app
Fato observado
GET /api/health: health check geral com status, uptime, memória e métricas internas do processo.GET /api/readiness: readiness baseado em variáveis obrigatórias, memória e uptime.GET /api/liveness: liveness simples do processo.
Evidências:
../../pages/api/health.ts#L20-L108../../pages/api/readiness.ts#L8-L83../../pages/api/liveness.ts#L8-L31
Uso dos probes no Kubernetes
Fato observado
- O chart Helm usa
/api/healthparalivenessProbe,readinessProbeestartupProbe. - O container expõe porta
3000, e o Service publica80 -> 3000.
Divergência
- Embora existam endpoints dedicados de readiness e liveness, o Deployment não os utiliza nas probes.
Evidências:
../../helm/templates/deployment.yaml#L41-L76../../helm/templates/service.yaml#L7-L13../../pages/api/readiness.ts#L8-L83../../pages/api/liveness.ts#L8-L31
Métricas-chave
Métricas diretamente expostas
Fato observado
/api/healthexpõe:status;uptime.secondseuptime.human;memory.used,memory.total,memory.external,memory.usage;metrics.totalRequests;metrics.healthCheckCount;metrics.timeSinceLastRequest;metrics.healthCheckDuration;metrics.consecutiveSlowChecks.
/api/readinessexpõe estado deenvironment,memoryeuptime.
Evidências:
Métricas/sinais de frontend observáveis
Fato observado
- O Datadog RUM é inicializado com
trackUserInteractions,trackResourcesetrackLongTasks. - O endpoint
/api/envsforneceappVersion,datadog.appId,clientToken,serviceName,env,sessionSampleRateesessionReplaySampleRate.
Evidências:
Prioridade operacional sugerida
Inferência controlada
- Se a operação precisar escolher poucos sinais para monitorar primeiro, os mais críticos já expostos pelo app são:
health.status;memory.usage;healthCheckDuration;consecutiveSlowChecks;readiness.checks.environment;- erros
[HTTP Timeout]; - erros
[Auth] Too many concurrent requestse[Auth] TIMEOUT after 15s.
Evidências:
../../pages/api/health.ts#L71-L97../../pages/api/readiness.ts#L25-L58../../src/common/util/fetchWithTimeout.ts#L23-L26../../pages/api/auth/[...nextauth].ts#L49-L56../../pages/api/auth/[...nextauth].ts#L109-L124
Onde olhar logs
1. Saída do processo da aplicação
Fato observado
- Os logs do runtime são emitidos por
console.*, então o ponto primário de observação é stdout/stderr do processo Node que executaserver.js. - Em Kubernetes, esse stdout/stderr pertence ao container definido no Deployment.
Evidências:
../../Dockerfile#L53-L58../../src/common/util/fetchWithTimeout.ts#L23-L26../../src/common/util/fetchWithTimeout.ts#L49-L55../../helm/templates/deployment.yaml#L35-L45
2. Logs do pipeline
Fato observado
- O build, push e deploy são executados por GitHub Actions; falhas nesses passos aparecem no log do workflow.
Evidências:
../../.github/workflows/ci-cd-pipeline.yaml#L15-L57../../.github/workflows/ci-cd-pipeline.yaml#L68-L89../../.github/workflows/ci-cd-pipeline.yaml#L100-L121../../.github/workflows/ci-cd-pipeline.yaml#L132-L153
3. Console do navegador
Fato observado
- Problemas de bootstrap do Datadog e de configuração AMEI/Keycloak também aparecem no cliente.
Evidências:
../../app/components/DatadogInit.tsx#L27-L29../../src/common/components/providers/Providers.component.tsx#L22-L38../../src/common/components/providers/Providers.component.tsx#L46-L58
Lacuna atual
Fato observado
- O repositório não versiona configuração de agregador de logs, dashboard, tracing distribuído ou alerta.
Evidências:
Alertas recomendados
Inferência controlada
As recomendações abaixo derivam dos sinais já expostos pelo app e das falhas tratadas explicitamente pelo código.
Alertas de disponibilidade
- Alertar quando
/api/healthresponder503oustatus = "unhealthy". - Alertar quando
/api/healthresponderstatus = "degraded"por janela contínua. - Alertar quando
/api/readinessresponder503oustatus = "not_ready".
Evidências:
Alertas de saturação/memória
- Alertar quando
memory.usageem/api/healthficar acima de90%. - Alertar quando
consecutiveSlowChecks >= 3. - Alertar quando
readiness.checks.memory = false.
Evidências:
Alertas de integração
- Alertar em ocorrência recorrente de
[HTTP Timeout]. - Alertar em erros recorrentes de
whats/otpSend,whats/sendFlowTemplate,wp/getCustomization,wp/getUserEnrollStatus,maintenance_mode. - Alertar em
[Middleware Error]recorrente para capturar falha de consulta de manutenção.
Evidências:
../../src/common/util/fetchWithTimeout.ts#L23-L26../../src/features/api/external/whats/sendFlowTemplate/sendFlowTemplate.ts#L33-L35../../src/features/api/external/wp/getMaintenanceMode/getMaintenanceMode.ts#L22-L29../../middleware.ts#L30-L33
Alertas de autenticação
- Alertar quando aparecer
[Auth] Too many concurrent requests. - Alertar quando aparecer
[Auth] TIMEOUT after 15s. - Alertar quando
/api/config/keycloakresponder500por configuração incompleta.
Evidências:
../../pages/api/auth/[...nextauth].ts#L49-L56../../pages/api/auth/[...nextauth].ts#L109-L124../../pages/api/config/keycloak.ts#L41-L49
Alertas de telemetria frontend
- Alertar para ausência ou falha de configuração Datadog em ambientes onde RUM deveria estar ativo.
- Tratar como pendência a divergência entre
NEXT_DATADOG_CLIENT_IDno.env.exampleeNEXT_DATADOG_CLIENT_TOKENusado pelo runtime.
Evidências:
../../app/components/DatadogInit.tsx#L8-L29../../app/api/envs/route.ts#L7-L18../../.env.example#L21-L27../../helm/templates/secret.yaml#L45-L51
Pendências
- Confirmar se há dashboards, centralização de logs e alertas fora deste repositório.
- Confirmar se o uso de
/api/healthpara todas as probes foi decisão intencional e permanente. - Resolver a divergência entre
NEXT_DATADOG_CLIENT_IDeNEXT_DATADOG_CLIENT_TOKEN.
Evidências: