A maioria dos sistemas em produção não é "observable", é "monitored". Existe diferença real. Monitoring responde "X está vermelho?". Observability responde "por que X virou vermelho de jeitos que você não previu?". Logs verbose sem contexto, métricas sem cardinalidade decente, traces ausentes, alertas paginando madrugadas em problemas inúteis. Tudo isso é norma.
Este módulo é observability moderna: três pilares (logs, metrics, traces), OpenTelemetry como padrão, RED/USE methods, SLO/SLI/SLA, alerting baseado em error budget, profiling, e o stack realista (Prometheus/Grafana, Loki, Tempo, ou alternativas SaaS). Você sai sabendo instrumentar um sistema novo from scratch, definir SLOs, e debugar incidente sem refletor.
2. Teoria Hard
2.1 Logs, metrics, traces
Logs: eventos discretos, alta cardinalidade, low volume per evento. Bom pra "o que aconteceu nesse request específico".
Metrics: valores numéricos agregados ao longo do tempo. Cardinalidade limitada. Bom pra "como o sistema está se comportando em geral".
Traces: chain de spans através de serviços, relacionados por trace ID. Bom pra "por que esse request demorou 8s".
Cada um tem custo e finalidade. Bons sistemas usam todos, integrados.
2.2 Logs estruturados
Logs não-estruturados ("user 123 paid 50") são query-hostis. Logs estruturados (JSON com fields) são queryáveis:
Summary: percentis pré-calculados client-side. Use Histogram quase sempre (server-side aggregation).
Cardinalidade explode quando você adiciona labels com muitos valores distintos (userId, tenantId com 100k tenants). Memory blowup em Prometheus. Limite labels a baixa cardinalidade (status code, route, region).
2.4 RED e USE methods
RED (Rate, Errors, Duration), pra serviços que respondem requests:
Rate: req/s.
Errors: % falhando.
Duration: latência (p50, p95, p99).
USE (Utilization, Saturation, Errors), pra recursos:
Utilization: % busy.
Saturation: queue/wait.
Errors: count.
Pra cada serviço, dashboards RED. Pra cada recurso (CPU, disk, queue), USE.
2.5 Traces e OpenTelemetry
Distributed tracing: request percorre 5 serviços; cada um cria spans com timing e attributes; tudo amarrado por trace ID.
OpenTelemetry (OTel) virou padrão de fato em 2024-2026:
API + SDK pra logs, metrics, traces.
Vendor-neutral: backend pode ser Jaeger, Tempo, Datadog, New Relic, Honeycomb.
Propagation via headers (traceparent).
Auto-instrumentation pra muitas libs (HTTP, DB, Redis, Kafka).
SLA: contratual com clientes. SLO < SLA com margem.
Error budget: 1 - SLO. Tolerável de falhar.
Burn rate alerting: alarm quando você está consumindo budget muito rápido pra restar 30 dias. Ex: budget de 30 dias inteiramente consumido em 1h = burn rate 30*24 = 720x.
Vantagem: alerta acionável. "Latência subiu" é vago; "burn rate alto, vai estourar SLO em 4h" é acionável.
2.8 Stack open-source moderno
Prometheus: metrics ingestion + query (PromQL). De fato standard.
Grafana: dashboards. PromQL, LogQL, TraceQL.
Loki: logs storage barato (mesmo modelo Prometheus, mas pra logs).
Tempo: traces storage.
Alertmanager: routing de alertas pra PagerDuty/Slack/email.
Mimir / Thanos / Cortex: Prometheus em escala, retention longa.
Skill básica: 5-6 queries que você usa pra incidente. Se você não consegue rapidamente "quantos erros 5xx em /orders nas últimas 5 min, agrupado por tenant", instrumentação está fraca.
2.11 Alertas
Princípios:
Ação requerida: cada alerta exige humano. "Disk 90%" sem auto-scale? Alerta. Com auto-scale? Métrica.
Sintomas, não causas: "p99 > 1s" (sintoma, user-facing) > "DB conn pool > 80%" (causa interna).
Ruído kills: alerta que dispara 50x/dia ninguém olha mais.
Sampling profiler runs em produção pra mostrar "onde CPU vai":
pprof (Go), clássico.
node --prof, 0x, clinic flame (Node).
Pyroscope / Grafana Pyroscope: continuous profiling, integrado ao Grafana.
Datadog Continuous Profiler, Sentry Profiling.
Use quando p99 alto sem causa óbvia em metrics/traces.
2.14 RUM (Real User Monitoring)
Front-end:
Web Vitals (LCP, INP, CLS) coletadas no browser.
Sentry / Datadog RUM / Grafana Faro.
Sem isso, perf de front é cego.
2.15 Synthetic monitoring
Bots simulando user em rotas críticas, periodicamente:
Pingdom, UptimeRobot, Checkly.
Grafana k6 cloud, Datadog synthetics.
Detecta downtime quando ninguém está usando. Catch regressões rapidamente.
2.16 eBPF observability, deep
eBPF (extended Berkeley Packet Filter) deixou de ser nicho de kernel hackers e virou categoria de observability mainstream entre 2023-2025. Vale entender por que e quando usar.
O que é eBPF tecnicamente:
Linguagem bytecode rodando em VM dentro do kernel Linux. Verifier checa programa antes de carregar (sem loops infinitos, sem violar memória).
Pode atachar em kprobes (functions do kernel), uprobes (functions de user space), tracepoints, cgroups, socket filters, XDP (Packet processing antes da network stack).
Programa coleta dados em maps (hash, array, ring buffer) que user space lê.
Custo: ~5-15% overhead em workloads bem instrumentados, significativo mas viável.
Por que substitui agentes tradicionais:
Sem instrumentação de código. Tradicional APM exige SDK em cada lib (HTTP, DB driver, gRPC). eBPF lê do kernel a syscall que o SDK iria interceptar.
Cobre apps que você não controla: vendor app, legacy binary, processo do OS.
Visibilidade L3-L7 num framework só.
Alta cardinalidade barata: tracking por IP/PID/cgroup sem cost de span por request.
Tools em produção (2026):
Tool
Foco
Onde brilha
Pixie (CNCF)
K8s "instant observability"
Auto-detect HTTP/gRPC/DB queries. Latency/error breakdown sem instrumentação.
Cilium Tetragon
Security + observability
Detect process exec, file access, network. Audit + run-time policy.
Parca
Continuous profiling
Pprof-format flamegraphs do cluster inteiro. Achar funções caras em prod.
Cilium
CNI + service mesh
Substitui kube-proxy + Istio sidecar. L7 policy via eBPF, sem sidecar.
Coroot
Full-stack observability
Mapa de serviços auto-gerado, RED/USE method baseados em eBPF.
Inspektor Gadget
K8s troubleshooting
Coleção de gadgets eBPF (trace exec, DNS, net policies).
bpftrace
Ad-hoc tracing
DTrace-like one-liner pra investigar prod sem instalar nada permanente.
Beyla (Grafana)
Auto-instrumentation HTTP/gRPC
Span generation OTel-compat sem SDK.
Quando vale eBPF observability vs OTel manual:
Caso
Tradicional (OTel SDK)
eBPF
App que você desenvolve, ownership total
Melhor, span semantics ricos
Complementar
Mix de apps de fornecedores (Postgres, Redis, custom)
Forensics de incident (que processo escreveu nesse arquivo?)
Logs, audit
Tetragon
Latency breakdown de Postgres query interno
Lib instrumentation se exists
bpftrace cover
Pegadinhas:
Kernel version matters. eBPF moderno (CO-RE, Compile Once Run Everywhere) precisa Linux 5.10+. Pra distros com kernel velho, fallback BPF tradicional.
GKE/EKS Autopilot e Fargate: limitam capabilities, várias eBPF tools não funcionam. Use nodes managed.
Encryption pode mascarar: HTTPS dentro de TLS. Pixie usa uprobes em libssl pra capturar antes do encrypt, funciona se app linka libssl dynamically.
Cardinalidade ainda é problema: eBPF gera muito dado. Filtre/sample ou backend cai.
Estratégia pragmática 2026:
App próprio: OTel SDK pra spans + métricas. eBPF complementa pra blind spots (DB internals, syscalls, network).
Plataforma com mix de apps: Pixie ou Coroot como zero-config baseline. Adicionar OTel onde precisar custom semantics.
Security forense: Tetragon ou Falco (ambos eBPF-based hoje).
2.17 Honeycomb-style high-cardinality
Argumento de Charity Majors: agregação cedo (Prometheus) joga fora dimensions importantes. Eventos com alta cardinalidade preservados (1 evento por request, com 50 attributes) permitem perguntas que você ainda não sabia.
Honeycomb foi pioneira; Datadog, NewRelic seguiram. Trace-based observability é a evolução.
2.18 Custo
Observability pode dominar bill em projetos médios:
Logs verbose: $1k+/mês fácil.
Metrics high-cardinality: cardinality explosion no Prometheus.
Traces 100% sample em volume alto: caro.
Pratique:
Sample.
Drop logs sem valor (request access logs duplicando ALB log).