História: O Guardião dos Logs 🔒📊
A empresa NebulaCorp era dona de 48 marcas diferentes: desde apps de delivery até plataformas de streaming. Cada marca gerava milhões de eventos e logs diariamente: cliques, transações, erros, auditoria. O caos começou quando cada marca implementava suas próprias soluções. Uns usavam arquivos CSV enviados por FTP, outros empurravam eventos para filas, alguns batiam direto em endpoints HTTP.
Isso tornava impossível auditar em tempo real e detectar incidentes de forma unificada. A liderança decidiu:
“Chega de soluções isoladas. Vamos criar nosso próprio sistema de coleta e centralização de logs, totalmente sob controle interno, sem depender de serviços caros como Datadog.”
A Solução Proposta
O time de engenharia arquitetou um sistema híbrido de ingestão:
- Camada Quente (real-time):
- Logs via HTTP e filas.
- InfluxDB para consultas rápidas e alertas em tempo real.
- Camada Fria (batch e histórico):
- Tudo armazenado no MinIO (S3 compatível).
- Processamento com MapReduce para análises pesadas e consolidação histórica.
Esse sistema seria o coração de observabilidade da NebulaCorp. Mas havia um desafio ainda maior: como garantir qualidade, consistência e velocidade na evolução do código que sustentava esse monstro?
O Papel do CI
O time percebeu que sem um pipeline de Continuous Integration robusto, a solução nunca se manteria. Então, decidiram transformar o pipeline em um “guardião dos logs”.
- Porta de Entrada (Build & Lint)
- Cada PR era analisado automaticamente.
- Linters e validações de schema garantiam que qualquer novo coletor seguisse o padrão comum.
- Testes de Ingestão
- Pipelines simulavam eventos chegando tanto via HTTP quanto via fila.
- Containers fake de RabbitMQ e endpoints mockados validavam integração.
- Testes de Fluxo Quente
- O CI rodava InfluxDB em contêiner.
- Testes de queries garantiam que dashboards e alertas respondiam em menos de 2s.
- Testes de Fluxo Frio
- O CI populava buckets no MinIO com milhões de eventos sintéticos.
- Jobs de MapReduce rodavam em miniatura, checando se relatórios fechavam corretamente.
- Observabilidade do Próprio CI
- Cada build emitia métricas sobre tempo de ingestão, confiabilidade dos testes e cobertura.
- O pipeline tinha dashboards próprios em Grafana: eles monitoravam até o “guardião dos logs”.