Observabilidade: o que é, os três pilares e como aplicar

Observabilidade: o que é, os três pilares e como aplicar

Se você já ficou olhando pra um gráfico de CPU normal, latência normal, tudo verde no dashboard, enquanto o cliente jurava que o sistema estava fora do ar, você já sentiu na pele o problema que a observabilidade tenta resolver. Monitoramento clássico responde as perguntas que a gente pensou em fazer antes do deploy. O problema é que produção quase sempre quebra de um jeito que ninguém previu, e é aí que aquele painel bonitinho de CPU não ajuda em nada.

A palavra virou buzzword de vendor, isso é verdade, e muita gente usa “observabilidade” só como sinônimo chique de “temos uns dashboards”. Mas por trás do hype existe uma ideia técnica bem concreta, com raiz em teoria de controle, que muda de fato como a gente debuga sistemas distribuídos. Neste post a gente vai do conceito à prática: a definição direta, os três pilares (logs, métricas e traces), por que observabilidade não é a mesma coisa que monitoramento, o papel do OpenTelemetry no meio disso tudo, e um caminho realista pra começar sem quebrar o orçamento nem a sanidade do time.

O que é observabilidade

Observabilidade é a capacidade de entender o estado interno de um sistema a partir dos dados que ele emite pra fora, sem precisar abrir o código nem fazer um novo deploy pra investigar. Em outras palavras: se um comportamento estranho aparece em produção, você consegue responder “por que isso aconteceu?” só olhando os sinais que o sistema já produz (logs, métricas e traces), inclusive perguntas que você nunca imaginou que faria.

O termo vem da teoria de controle, dos anos 1960, onde um sistema é dito observável quando dá pra inferir seu estado interno completo a partir das suas saídas externas. Rudolf Kálmán usou esse conceito pra sistemas de controle décadas antes de qualquer engenheiro de software pegar a palavra emprestada. Na engenharia de software moderna a definição não é tão matemática, mas o espírito continua o mesmo: quão bem dá pra explicar o que está rolando lá dentro sem grudar um debugger em cada processo.

A diferença que importa na prática é essa: monitoramento te avisa que algo está errado, observabilidade te ajuda a descobrir por que. Um sistema pode ser super monitorado e nada observável, cheio de alertas que disparam sem te dar a menor pista da causa raiz.

Observabilidade: o que é, os três pilares e como aplicar ilustracao 1

Os três pilares da observabilidade

A comunidade convencionou falar em três pilares: logs, métricas e traces. Não é uma lei da física, é um jeito prático de organizar os tipos de telemetria que você coleta. Cada um responde um tipo de pergunta diferente, e a mágica acontece quando você consegue pular de um pro outro durante uma investigação. Vou explicar um por um, com honestidade sobre onde cada um brilha e onde atrapalha.

Logs: o registro do que aconteceu

Log é o pilar mais antigo e o mais intuitivo. É um registro textual de eventos discretos, com timestamp, que o sistema escreve conforme roda. O problema clássico é que a maioria dos logs por aí é texto solto, escrito pra ser lido por humano, e isso vira um pesadelo pra buscar e correlacionar em escala.

A virada de chave é o log estruturado. Em vez de jogar uma frase no arquivo, você emite um evento em formato de chave-valor, normalmente JSON, com campos consistentes. Aí você consegue filtrar, agregar e cruzar sem depender de regex frágil. Veja a diferença na prática:

{
  "timestamp": "2026-07-12T14:32:08.114Z",
  "level": "error",
  "service": "checkout-api",
  "trace_id": "af3c9b1e2d7f4a08",
  "user_id": 88213,
  "event": "payment_failed",
  "gateway": "stripe",
  "error_code": "card_declined",
  "latency_ms": 842
}

Repare no campo trace_id. Ele é o que amarra esse log a um trace específico depois, e é justamente essa ligação que transforma três silos separados numa investigação fluida. Sem isso, você fica pulando entre ferramentas tentando adivinhar qual log pertence a qual request.

Métricas: números agregados ao longo do tempo

Métrica é um valor numérico medido em intervalos regulares: quantidade de requests por segundo, uso de memória, taxa de erro, latência no percentil 95. Diferente do log, que é um evento por vez, a métrica já vem agregada, e por isso é barata de armazenar e rapidíssima de consultar. Um contador que incrementa custa quase nada, mesmo com milhões de requests.

É o pilar ideal pra dashboards e alertas, porque você quer ver tendência e disparar quando um número cruza um limiar. O ponto fraco é a granularidade: métrica te diz que a taxa de erro subiu pra 3%, mas não te diz qual usuário, qual request ou por quê. Ela aponta o incêndio, não te leva até a fonte. No formato do Prometheus, uma métrica exposta pela sua aplicação fica mais ou menos assim:

# HELP http_requests_total Total de requisicoes HTTP
# TYPE http_requests_total counter
http_requests_total{method="POST",handler="/checkout",status="500"} 27
http_requests_total{method="POST",handler="/checkout",status="200"} 14032

Aqueles rótulos entre chaves (as labels) são o que dá dimensão à métrica. Você consegue fatiar por método, por rota, por código de status. Só cuidado: cada combinação de labels vira uma série temporal nova, e labels de alta cardinalidade (tipo user_id) explodem o custo de armazenamento rapidinho. Esse é um dos erros mais comuns de quem começa.

Traces: o caminho de uma requisição

Trace é o pilar que faz mais diferença em arquitetura distribuída, e é o que microsserviços tornaram indispensável. Um trace segue uma única requisição por todos os serviços que ela toca, mostrando quanto tempo cada etapa levou e onde travou. Cada etapa é um span, e os spans se aninham formando uma árvore que conta a história completa daquela request.

Numa arquitetura com vinte serviços, quando uma chamada demora 4 segundos, o trace te mostra na hora que 3,7 desses segundos foram num único serviço de recomendação esperando o banco. Sem trace, você ia ficar abrindo log de serviço em serviço, no braço, tentando remontar o percurso. O que amarra tudo é o trace_id propagado de serviço em serviço, geralmente via headers HTTP, mais o span_id de cada trecho.

Pilar O que responde Custo de armazenamento Melhor uso Ponto fraco
Logs O que exatamente aconteceu neste evento Alto (volume cru) Debug de detalhe, auditoria Difícil de agregar, cardinalidade solta
Métricas Quanto, com que frequência, qual tendência Baixo (já agregado) Dashboards, alertas, capacidade Não explica a causa, sem contexto de request
Traces Por onde passou e onde travou Médio (com amostragem) Latência em sistemas distribuídos Overhead de instrumentação e propagação

Uma ressalva honesta: muita gente séria já critica esse modelo de “três pilares” por ser silado demais. Se logs, métricas e traces vivem em três bancos separados, sem trace_id compartilhado, você tem três ferramentas caras e nenhuma observabilidade de verdade. A tendência mais atual é tratar tudo como eventos ricos e correlacionáveis, e é exatamente aí que entra o OpenTelemetry. Mas os três pilares continuam sendo um bom mapa mental pra começar.

Observabilidade vs monitoramento tradicional

Essa é a confusão mais comum, então vale separar direito. Monitoramento é você definir de antemão um conjunto de métricas e checagens, e ficar de olho se elas saem do esperado. É reativo por natureza e opera sobre “known unknowns”, os problemas que você já sabe que podem acontecer: o disco pode encher, a CPU pode estufar, o endpoint pode cair. Você cria um alerta pra cada um desses e pronto.

O problema é que sistemas distribuídos modernos falham de jeitos que ninguém colocou num alerta. São os “unknown unknowns”, as combinações bizarras que só aparecem em produção com tráfego real. Monitoramento não pega isso, porque você não pode alertar sobre uma pergunta que nunca formulou. Observabilidade ataca justamente esse buraco: em vez de pré-definir todas as perguntas, ela garante que os dados sejam ricos o suficiente pra você fazer perguntas novas na hora do incidente, sem deploy.

Aspecto Monitoramento tradicional Observabilidade
Pergunta central Está tudo dentro do esperado? Por que isto está acontecendo?
Tipo de falha Known unknowns (previstos) Unknown unknowns (imprevistos)
Postura Reativa, baseada em limiares Exploratória, investigativa
Perguntas Definidas antes do deploy Formuladas durante o incidente
Serve bem para Infra estável, monolitos Microsserviços, sistemas dinâmicos

Não é que um substitui o outro, cuidado com essa leitura. Monitoramento continua vivo e útil: alerta é monitoramento, e você precisa dele pra saber que tem um incidente rolando. A observabilidade é o que você usa depois que o alerta dispara, pra entender o que raios está acontecendo. Na prática eles convivem, e todo bom setup tem os dois.

Observabilidade: o que é, os três pilares e como aplicar ilustracao 2

OpenTelemetry e o ecossistema de ferramentas

Aqui está a parte que mais mudou nos últimos anos. Durante muito tempo, instrumentar uma aplicação te prendia a um vendor: você colocava o agente da ferramenta X no código, e trocar de fornecedor depois significava reinstrumentar tudo. Um saco, e caro. O OpenTelemetry (abreviado OTel) veio pra acabar com isso.

OpenTelemetry é um projeto open source da CNCF, a mesma fundação do Kubernetes, e virou o padrão de fato pra gerar telemetria. A ideia é simples e poderosa: você instrumenta seu código uma vez, usando as APIs e SDKs do OTel, e a telemetria sai num formato padronizado (o OTLP). Depois você decide pra onde manda, seja Jaeger, Prometheus, Grafana, ou qualquer plataforma comercial. Trocar de destino não te obriga a mexer no código de novo. Isso quebra o lock-in de vendor, que era a grande dor da área.

No meio do caminho tem o OpenTelemetry Collector, um processo que recebe a telemetria da sua aplicação, processa (filtra, enriquece, faz amostragem) e reencaminha pros destinos. Ele desacopla quem produz de quem consome, e na prática é uma das peças mais úteis do ecossistema. Sobre as ferramentas mais comuns que você vai encontrar:

  • Prometheus: banco de dados de séries temporais focado em métricas, com um modelo de coleta por scraping e uma linguagem de query própria, a PromQL. É praticamente o padrão pra métricas em ambiente cloud native.
  • Grafana: a camada de visualização. Puxa dados de Prometheus, de bancos de logs, de traces, e monta os dashboards. Grafana não guarda os dados, ele desenha em cima do que outras fontes fornecem.
  • Jaeger: nasceu no Uber e é uma das opções mais usadas pra armazenar e visualizar traces distribuídos. Você vê a árvore de spans, o waterfall de latência, tudo ali.
  • Loki: banco de logs da mesma turma do Grafana, pensado pra ser barato indexando só metadados em vez do conteúdo inteiro do log.
  • OpenTelemetry Collector: o roteador de telemetria que já mencionei, o ponto central por onde tudo passa antes de chegar ao destino.

Uma pilha open source bem comum hoje é OTel pra instrumentar, Collector pra rotear, Prometheus pra métricas, Loki pra logs, Jaeger pra traces e Grafana por cima de tudo pra visualizar. Dá trabalho de montar e operar, isso é real, e é por isso que existe um mercado inteiro de plataformas comerciais que entregam esse combo pronto. A escolha entre montar ou comprar depende do tamanho do time e de quanto você valoriza controle versus conveniência.

Como implementar observabilidade na prática

Teoria é bonita, mas na hora de aplicar todo mundo trava sem saber por onde começar. A pior abordagem é tentar instrumentar tudo de uma vez e afogar o time em dados que ninguém olha. Um caminho mais realista, na minha experiência, segue mais ou menos esta ordem:

  1. Comece pelos logs estruturados. É o menor esforço com maior retorno. Troque os logs de texto solto por JSON com campos consistentes, e já inclua um trace_id em cada linha desde o começo, mesmo que você ainda não tenha tracing. Seu eu do futuro vai agradecer.
  2. Adote OpenTelemetry desde o início. Não se prenda a um vendor logo de cara. Instrumente com os SDKs do OTel, que hoje têm instrumentação automática pra frameworks comuns, e mande a telemetria via OTLP. Assim você fica livre pra trocar de backend depois sem retrabalho.
  3. Suba métricas dos sinais que importam. Não meça tudo. Foque nos quatro sinais dourados do Google SRE: latência, tráfego, erros e saturação. Eles cobrem a maior parte do que você precisa saber sobre a saúde de um serviço, e evitam o pântano de dashboards inúteis.
  4. Instrumente traces nos caminhos críticos. Comece pelos fluxos que mais doem quando quebram, o checkout, o login, a API principal. Garanta que o trace_id se propague entre serviços via headers, porque sem propagação o trace fura e você perde a história no meio.
  5. Correlacione os três. Esse é o pulo do gato que separa “temos dashboards” de “temos observabilidade”. Garanta que o mesmo trace_id aparece no log, na métrica exemplar e no trace, pra você saltar de um alerta pro trace e do trace pro log em segundos, sem trocar de aba nem perder o fio.
  6. Cuide da cardinalidade e do custo. Observabilidade cara demais é observabilidade que o financeiro vai mandar cortar. Configure amostragem em traces, evite labels de alta cardinalidade em métricas e defina retenção diferente por tipo de dado. Log velho quase nunca precisa ficar meses no armazenamento quente.

Um erro que vejo direto: time instrumenta um monte de coisa, gera terabytes de telemetria, e ninguém nunca olha 90% daquilo. Observabilidade não é sobre coletar o máximo de dados, é sobre coletar os dados certos e conseguir fazer perguntas úteis com eles. Menos volume e mais correlação vence quase sempre.

Perguntas frequentes sobre observabilidade

Observabilidade e monitoramento são a mesma coisa?

Não. Monitoramento é acompanhar métricas pré-definidas pra saber quando algo sai do esperado, ele te avisa que existe um problema. Observabilidade é a capacidade de investigar e entender por que o problema acontece, inclusive em cenários que você nunca previu. Monitoramento responde “está tudo bem?”, observabilidade responde “por que não está?”. Os dois se complementam num setup maduro.

Preciso dos três pilares pra ter observabilidade?

Não obrigatoriamente todos ao mesmo tempo, mas em sistemas distribuídos os três se completam de um jeito que é difícil abrir mão. Logs dão o detalhe do evento, métricas dão a visão agregada e traces mostram o percurso da requisição. Dá pra começar só com logs estruturados bem feitos e ir evoluindo. O que importa mais que ter os três é conseguir correlacionar o que você tem, via trace_id compartilhado.

OpenTelemetry substitui o Prometheus, o Jaeger ou o Grafana?

Não, ele trabalha junto. OpenTelemetry é o padrão pra gerar e transportar a telemetria de forma neutra, ele não guarda nem visualiza nada. Prometheus armazena métricas, Jaeger armazena e mostra traces, Grafana faz a visualização. O OTel é a camada que instrumenta seu código e entrega os dados pra essas ferramentas sem te prender a nenhuma delas em específico.

Observabilidade só faz sentido pra microsserviços?

Ela brilha mais em arquitetura distribuída, onde uma requisição atravessa vários serviços e rastrear o problema no braço é inviável. Mas mesmo um monolito se beneficia de logs estruturados e boas métricas. O tracing é que rende bem menos quando tudo roda num processo só. Resumindo: em monolito você colhe a maior parte do valor com logs e métricas, e o trace vira quase supérfluo.

Qual pilar devo implementar primeiro?

Logs estruturados, quase sempre. É a mudança de menor esforço e maior retorno imediato: você troca texto solto por JSON com campos consistentes e já ganha capacidade de busca e agregação. Coloque um trace_id em cada log desde o dia um, mesmo antes de ter tracing configurado. Depois evolua pra métricas dos sinais dourados e, por fim, traces nos caminhos críticos.

Observabilidade tem a ver com SRE e SLOs?

Tem tudo a ver. SRE (Site Reliability Engineering) usa observabilidade como base pra definir e acompanhar SLOs, os objetivos de nível de serviço, tipo “99,9% das requisições respondem em menos de 300ms”. Sem telemetria confiável você não consegue medir se está cumprindo o SLO, nem calcular seu error budget. A observabilidade é a fundação de dados sobre a qual toda a prática de confiabilidade se apoia.

Conclusão

Observabilidade não é comprar uma ferramenta nem encher a tela de gráfico. É uma propriedade que você constrói no seu sistema pra conseguir explicar comportamentos que ninguém antecipou, sem ter que fazer deploy só pra investigar. Os três pilares, logs, métricas e traces, são o mapa mental pra organizar a telemetria, mas o que faz eles renderem de verdade é a correlação entre eles, aquele trace_id teimoso amarrando tudo.

Se você está começando agora, não tente boiar num oceano de dados. Faça logs estruturados direito, adote OpenTelemetry pra não se prender a vendor nenhum, meça os sinais que importam e vá evoluindo pros traces conforme a arquitetura pedir. Feito assim, no próximo incidente das 3 da manhã você vai estar respondendo “por que isso quebrou” em minutos, em vez de ficar adivinhando no escuro enquanto o cliente reclama. E essa diferença, quem já plantonou sabe, vale cada hora investida.

Para quem constrói sistemas que precisam de dados oficiais, o Hub do Desenvolvedor mantém APIs de consulta de CNPJ e CPF na Receita Federal prontas para você integrar sem burocracia.

Compartilhe nas mídias: