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:
| Formato | Detecção |
|---|---|
| JSON estruturado | Automático |
logfmt (key=value) | Automático |
| Apache/Nginx combined | Automático |
| Syslog (RFC 3164 e 5424) | Automático |
| Stacktrace Java/Python | Agrupamento automático em exceção única |
| Formato customizado | Configurá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ê escreve | Encontra |
|---|---|
timeout | logs com “timeout” na mensagem (sem diferenciar maiúsculas) |
"connection refused" | a frase exata na mensagem |
service:checkout | campo igual a valor |
level:(error OR warn) | um valor ou outro |
-host:web-1 ou NOT host:web-1 | exclui |
@user.id:42 | atributo do log (campos do JSON, atributos OTel) — sempre com @ |
@http.status_code>=500 | comparaçã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_idabrem 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
| Plano | Retenção de logs |
|---|---|
| Free | 3 dias |
| Pro | 15 dias |
| Max | 30 dias |
| Enterprise | 90 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
- Traces distribuídos — correlacionar logs com traces
- SLOs — criar SLOs baseados em log error rate
- AI Runbooks — o Aegies analisa logs para gerar correções