Software · Infraestrutura & Sistemas

Observabilidade em Produção: Os Três Pilares da Telemetria com OpenTelemetry

Indo além dos alertas reativos: como estruturar logs contextuais, métricas de séries temporais e rastreamento distribuído com o padrão aberto OpenTelemetry.

Diagrama dos três pilares da observabilidade unindo logs estruturados métricas de séries temporais e traces distribuídos com padrão OpenTelemetry

Em sistemas monolíticos legados rodando em um único servidor, solucionar uma anomalia em produção era um processo relativamente direto: o engenheiro acessava a máquina via SSH, abria o arquivo de log local com um utilitário de terminal e inspecionava a pilha de exceção para identificar a linha defeituosa. No entanto, em ecossistemas distribuídos modernos — onde uma única ação do usuário desencadeia chamadas assíncronas através de dezenas de microsserviços, balanceadores de carga, mensagerias e bancos de dados —, tentar diagnosticar lentidões e falhas intermitentes com ferramentas tradicionais de log transforma-se em um pesadelo operacional.

A Observabilidade não é um sinônimo moderno para monitoramento tradicional. Enquanto o monitoramento tradicional apenas responde quando um limiar predefinido foi violado (por exemplo, "o uso de CPU ultrapassou 90%"), a observabilidade confere aos engenheiros a capacidade de compreender por que o sistema está se comportando de determinada maneira em cenários de falhas inéditas e imprevistas (Unknown-Unknowns), baseando-se estritamente nas emissões de telemetria emitidas pelas aplicações.

Os Três Pilares Clássicos da Telemetria

Para inferir com precisão cirúrgica a saúde interna de um sistema em tempo real, a arquitetura de observabilidade apoia-se em três primitivas de dados complementares:

Pilar Pergunta Respondida Natureza dos Dados Caso de Uso Primário
Métricas O quê está acontecendo? Séries temporais numéricas agregadas (contadores, medidores, histogramas). Detecção precoce de anomalias, alertas e visão panorâmica de baixo custo.
Traces Onde está o gargalo? Grafos direcionados acíclicos (DAG) de spans correlacionados por ID único. Mapeamento de latência e dependências através de microsserviços distribuídos.
Logs Por que a falha aconteceu? Registros textuais estruturados e enriquecidos com metadados e carimbo de data/hora. Diagnóstico detalhado de causas-raiz em eventos discretos.

1. Métricas: A Visão Panorâmica de Baixo Custo

Métricas são dados numéricos agregados ao longo de janelas de tempo, projetados para serem extremamente compactos em armazenamento e rápidos para consulta. Em serviços corporativos, orientamos o desenho de métricas através de duas metodologias consagradas:

  • Método RED (para APIs e serviços web):
    • Rate: Quantas requisições por segundo estão chegando?
    • Errors: Quantas requisições estão falhando com códigos 5xx?
    • Duration: Quanto tempo as requisições estão demorando (analisando percentis p50, p95 e p99)?
  • Método USE (para recursos de infraestrutura como CPU, RAM e I/O):
    • Utilization: Porcentagem de tempo em que o recurso está ocupado.
    • Saturation: Tamanho da fila de trabalho acumulada aguardando o recurso.
    • Errors: Quantidade de falhas registradas no hardware ou no subsistema operacional.

2. Tracing Distribuído: Rastreando o Fluxo de Ponta a Ponta

O rastreamento distribuído (Distributed Tracing) mapeia a trajetória cronológica completa de uma requisição conforme ela navega pelo ecossistema:

  • Trace: Representa a transação completa de ponta a ponta, identificado por um TraceId único universal.
  • Span: Representa uma unidade atômica de trabalho contíguo dentro de um serviço específico (por exemplo, uma consulta SQL no banco, uma chamada HTTP a um parceiro ou o processamento de uma mensagem na fila). O Span registra seu nome, timestamp de início, duração, atributos de contexto e seu ParentSpanId.

O encadeamento entre serviços ocorre através da propagação de contexto (Context Propagation): a especificação padronizada pelo W3C (W3C Trace Context) injeta o cabeçalho traceparent nas requisições HTTP e mensagens de broker, garantindo que o TraceId seja mantido inalterado desde a borda até o banco de dados.

3. Logs Estruturados: A Narrativa Detalhada

Arquivos de log em texto livre não estruturado (print("Erro no pedido " + id)) são um desperdício em alta escala, pois impedem agregações analíticas. O padrão exigido pela indústria é o Log Estruturado em JSON, onde cada linha carrega campos explícitos e correlacionados:

{
  "timestamp": "2026-09-17T18:20:14.215Z",
  "level": "ERROR",
  "message": "Falha ao liquidar pagamento no gateway bancário.",
  "service.name": "orders-service",
  "traceId": "4bf92f3577b34da6a3ce929d0e0e4736",
  "spanId": "00f067aa0ba902b7",
  "customer.id": "cust-9912",
  "payment.gateway": "cielo",
  "exception.type": "GatewayTimeoutException"
}

Ao incluir o traceId e o spanId em cada linha de log, o engenheiro pode saltar instantaneamente de um pico de latência no gráfico para o trace específico e dali direto para os logs daquele exato milissegundo.

O Fim do Lock-in de Fornecedores: OpenTelemetry (OTel)

Historicamente, adotar telemetria significava instalar bibliotecas proprietárias de um fornecedor específico (como Datadog, Dynatrace, New Relic ou Azure Application Insights). Se a empresa decidisse trocar de fornecedor, todo o código-fonte precisava ser alterado e recompilado.

O OpenTelemetry (OTel), projeto open-source sob os cuidados da Cloud Native Computing Foundation (CNCF), unificou a indústria criando um padrão agnóstico e universal:

flowchart TD
    App["Aplicação (C#, Go, Node, Python)<br/>Instrumentada com SDK OpenTelemetry"]
    Collector["<b>OpenTelemetry Collector</b><br/>• Recebe telemetria via OTLP (gRPC / HTTP)<br/>• Processa, sanitiza e remove dados PII<br/>• Roteia e exporta para múltiplos backends"]
    
    subgraph Destinos["Destinos e Backends de Observabilidade"]
        Prometheus["Prometheus / Mimir<br/>(Métricas RED & USE)"]
        Jaeger["Jaeger / Tempo<br/>(Distributed Traces)"]
        Datadog["Plataformas Cloud<br/>(Datadog / Azure / AWS)"]
    end

    App -->|"Protocolo OTLP"| Collector
    Collector --> Prometheus
    Collector --> Jaeger
    Collector --> Datadog

A aplicação emite dados em um protocolo aberto (OTLP - OpenTelemetry Protocol). O OTel Collector atua como um intermediário neutro que recebe a telemetria, sanitiza informações sensíveis e pode exportar os mesmos dados simultaneamente para ferramentas open-source (como Prometheus, Grafana, Loki e Jaeger) ou plataformas corporativas pagas, garantindo soberania técnica total para a organização.

Boas Práticas para Observabilidade em Produção

Em sistemas distribuídos de missão crítica, a telemetria é considerada parte inegociável da definição de pronto (Definition of Done) de qualquer serviço:

  1. Instrumentação Nativa de Negócio: Não nos limitamos a métricas básicas de CPU e memória. Nossos serviços emitem métricas e spans customizados orientados a resultados de negócio: taxa de conversão de checkouts por minuto, tempo médio de liquidação bancária e volume financeiro transacionado.
  2. Proteção Rigorosa de Dados Sensíveis (LGPD / PII Sanitization): Nossos coletores e formatadores de log contam com filtros estritos que mascaram senhas, tokens de autorização, números de cartão e CPFs antes que a telemetria seja transmitida pela rede, prevenindo vazamentos de dados confidenciais nos consoles de observabilidade.
  3. Alertas Baseados em SLOs e Queima de Erro (Error Budget): Abolimos alertas ruidosos baseados em limiares estáticos de CPU temporários. As notificações de emergência da equipe de plantão são disparadas exclusivamente quando os Objetivos de Nível de Serviço (SLOs) de latência e disponibilidade prometidos aos usuários correm risco iminente de rompimento.