Software · Infraestrutura & Sistemas

Stack de Observabilidade Open Source: Prometheus, Grafana, Jaeger e ELK

Arquitetura detalhada da stack aberta de telemetria: coleta pull com Prometheus, dashboards no Grafana, spans com Jaeger e indexação textual via ELK.

Diagrama conceitual ilustrando stack de observabilidade open source: prometheus, grafana, jaeger e elk
Neste artigo

Operar microsserviços sem instrumentos confiáveis transforma incidentes em exercícios de adivinhação. A stack aberta consolidada pela comunidade corporativa divide as responsabilidades em três pilares fundamentais: Prometheus para métricas quantitativas, Jaeger para rastreamento de chamadas e ELK (Elasticsearch, Logstash, Kibana) para depuração granular de eventos.

flowchart TD
  subgraph Apps["Aplicações & Nós"]
    AppA["Microsserviço Pedidos"]
    AppB["Microsserviço Pagamentos"]
    NodeExporter["Node Exporter"]
  end

  subgraph MetricPipeline["Pipeline de Métricas"]
    Prom["Prometheus Server (Pull)"]
    AlertMgr["Alertmanager"]
  end

  subgraph TracePipeline["Pipeline de Traces"]
    JaegerCollector["Jaeger Collector (OTLP/Zipkin)"]
    JaegerStore[("Elasticsearch / Cassandra")]
  end

  subgraph LogPipeline["Pipeline de Logs"]
    Filebeat["Filebeat (DaemonSet)"]
    Logstash["Logstash / Kafka"]
    ES[("Elasticsearch Cluster")]
  end

  subgraph Visual["Visualização & Operação"]
    Grafana["Grafana Unified Dashboard"]
    Kibana["Kibana (Análise Textual)"]
  end

  AppA -- "/metrics" --> Prom
  AppB -- "/metrics" --> Prom
  NodeExporter -- "/metrics" --> Prom
  Prom --> AlertMgr
  Prom --> Grafana

  AppA -. "Spans gRPC" .-> JaegerCollector
  AppB -. "Spans gRPC" .-> JaegerCollector
  JaegerCollector --> JaegerStore
  JaegerStore --> JaegerCollector
  Grafana -. "Jaeger Plugin" .-> JaegerCollector

  AppA -. "JSON Logs" .-> Filebeat
  Filebeat --> Logstash --> ES
  ES --> Kibana
  ES --> Grafana

Prometheus e o Modelo Pull

O Prometheus opera primariamente via amostragem ativa (scraping HTTP). Cada processo expõe um endpoint textual padronizado contendo métricas com nomes e rótulos dimensionais (labels).

# Taxa de requisições por segundo com status 5xx nos últimos 5 minutos
sum(rate(http_requests_total{status=~"5.."}[5m])) by (service, route)
  /
sum(rate(http_requests_total[5m])) by (service, route) * 100

A principal armadilha operacional do Prometheus é a explosão de cardinalidade. Se um desenvolvedor injetar identificadores únicos (como IDs de usuário ou tokens UUID) dentro das labels de uma métrica, o mecanismo cria uma nova série temporal na memória para cada variação, consumindo gigabytes de RAM e degradando o motor TSDB.

Jaeger e Correlação Contextual

O Jaeger recebe spans estruturados que compartilham um mesmo TraceID. Quando a requisição passa pelo gateway e trafega por múltiplos serviços internos, cada etapa registra seu tempo de execução individual (duration) e metadados contextuais (tags). A correlação entre o trace do Jaeger e as linhas de log do ELK ocorre injetando o TraceID diretamente no formato estruturado de log da aplicação.

Ferramenta Papel Central Protocolo de Ingestão Modelo de Armazenamento Risco Operacional Principal
Prometheus Métricas numéricas e contadores Pull HTTP (/metrics) TSDB em disco local / Cortex Explosão de cardinalidade por labels dinâmicas
Grafana Camada visual unificada Conectores SQL, PromQL, OTLP Stateless (banco SQLite/Postgres de config) Consultas lentas congelando dashboards
Jaeger Rastreamento distribuído Push gRPC / UDP OTLP Cassandra / Elasticsearch / OpenSearch Volume de dados em tráfego intenso sem amostragem
ELK Stack Agregação e busca textual de logs Push via Beats / Logstash Índices invertidos em shards distribuídos Esgotamento de espaço em disco e I/O saturation

Na DATAXSTUDIOS, desenhamos arquiteturas que utilizam o OpenTelemetry Collector na camada de ponta, permitindo desviar métricas para o Prometheus e traces para o Jaeger sem prender o código das aplicações aos clientes específicos de cada fabricante.

Explorar este tema no Grafo de Conhecimento