Gerenciamento de logs

Ingestão, busca full-text, parsing automático e alertas de padrão para logs de qualquer formato.

Ingestão de logs

O Aegies ingere logs de três formas:

1. Via SDK (recomendado)

O SDK intercepta automaticamente o logger nativo do framework e envia os logs com trace_id e span_id já correlacionados:

import { aegies } from '@dodo/aegies';

// Logger nativo — o SDK injeta trace_id automaticamente
console.error('Payment failed', { orderId, reason });

// Ou use o logger do Aegies diretamente
aegies.log.error('Payment failed', { orderId, reason });

2. Via OpenTelemetry

Se você já usa OTel Logs API, basta apontar o exporter OTLP para o Aegies:

exporters:
  otlp/logs:
    endpoint: https://ingest.dodoaegies.com
    headers:
      Authorization: "Bearer ${DODO_KEY}"

service:
  pipelines:
    logs:
      exporters: [otlp/logs]

3. Via tail log file (agente)

Para aplicações que escrevem em arquivo, o agente do host lê o arquivo em tempo real:

# /etc/dodo-agent/logs.yaml
logs:
  - path: /var/log/nginx/access.log
    service: nginx
    format: combined
  - path: /app/logs/app.log
    service: payments-api
    format: json

Parsing automático

O Aegies detecta e faz parse automático dos formatos mais comuns:

FormatoDetecção
JSON estruturadoAutomático
logfmt (key=value)Automático
Apache/Nginx combinedAutomático
Syslog (RFC 3164 e 5424)Automático
Stacktrace Java/PythonAgrupamento automático em exceção única
Formato customizadoConfigurável via grok patterns

Para formatos customizados:

# /etc/dodo-agent/logs.yaml
logs:
  - path: /app/logs/legacy.log
    pipeline:
      - grok:
          pattern: '%{TIMESTAMP_ISO8601:timestamp} \[%{LOGLEVEL:level}\] %{GREEDYDATA:message}'

Busca com DQL

O explorador de logs (Logs no menu do dashboard) usa a DQL, a linguagem de busca do Aegies. É a mesma linguagem do explorador de traces, dos painéis de logs dos dashboards e dos alertas — aprendeu uma vez, usa em todo lugar.

Você escreveEncontra
timeoutlogs com “timeout” na mensagem (sem diferenciar maiúsculas)
"connection refused"a frase exata na mensagem
service:checkoutcampo igual a valor
level:(error OR warn)um valor ou outro
-host:web-1 ou NOT host:web-1exclui
@user.id:42atributo do log (campos do JSON, atributos OTel) — sempre com @
@http.status_code>=500comparação: >, >=, <, <=
service:check*curinga
@order.id:*o campo existe

Termos lado a lado são combinados com AND; use OR e parênteses para o resto:

service:checkout level:error ("payment declined" OR timeout) -@http.status_code:404

Campos prontos: level, service, host, source, message, trace_id, span_id, pod, namespace, container, template. O editor completa nomes de campos e sugere os valores mais comuns enquanto você digita; um erro de sintaxe aparece sublinhado no ponto exato.


Explorador de logs

  • Histograma por nível: o volume de logs no tempo, empilhado por nível. Arraste sobre as barras para dar zoom no intervalo.
  • Campos: a lista à esquerda mostra todos os campos encontrados e, ao clicar, os 5 valores mais frequentes com a porcentagem. + filtra por aquele valor, − exclui, e o ícone de coluna mostra o campo na tabela.
  • Linha expandida: clique em um log para ver todos os campos (aba Tabela, com os mesmos +/−) ou o JSON completo.
  • Contexto: “Ver contexto” mostra as linhas escritas antes e depois daquele log pelo mesmo serviço no mesmo host.
  • Ao vivo: novas linhas aparecem a cada poucos segundos, com a busca aplicada.
  • Trace e APM: logs com trace_id abrem o trace completo; “Ver no APM” abre a página do serviço.
  • Buscas salvas: salve busca, colunas e intervalo com um nome; ficam visíveis para toda a organização.
  • Link compartilhável: busca, intervalo e colunas ficam no endereço da página.

Alertas de logs

Em Alerts → Nova regra, escolha o sinal Log, escreva a busca em DQL (por exemplo service:payments-api level:error "payment failed") e o limite de contagem na janela. A regra conta os logs que casam com a busca e dispara quando passa do limite. Dica: monte a busca no explorador de logs antes de salvar a regra.


Retenção

PlanoRetenção de logs
Free3 dias
Pro15 dias
Max30 dias
Enterprise90 dias (ou sob contrato)

Buscas fora da retenção do plano voltam vazias. Veja Cobrança para os detalhes dos planos.


Mascaramento de dados sensíveis

O Aegies mascara automaticamente campos comuns como cartões de crédito, CPFs, senhas e tokens. Para regras customizadas:

# /etc/dodo-agent/scrubbing.yaml
scrubbing:
  - field: message
    pattern: '\b[0-9]{4}[- ]?[0-9]{4}[- ]?[0-9]{4}[- ]?[0-9]{4}\b'
    replacement: '[CARD]'
  - field: user.email
    action: hash  # armazena SHA-256 em vez do email real

Próximos passos