Linhas de montagem ELK e Loki
1) Porquê e quando: objetivos de logagem
Observabilidade e RCA: aceleração do debag, pós-mortem, controle SLO/SLA.
Segurança e auditoria, sinais de acesso, anomalias, investigações.
Métricas de negócios: conversão, flow de pagamento, erros de PSP, comportamento dos usuários.
Complacência: armazenamento, camuflagem PII, políticas de retenha, Legal Hold.
Tipos de logs: aplicativos, infraestrutura (kubelet, kube-proxy, CNI, ingress), redes, auditoria, pagamentos, eventos web, Nginx/Envoy, BD.
2) Arquiteturas de alto nível
Opção A: ELK
Producers → Logshipper (Filebeat/Fluent Bit/Vector) → Logstash/Beats input → Elasticsearch → Kibana/Алертинг
Opção B: Loki
Producers → Promtail/Fluent Bit → Loki distributor/ingester/querier → Grafana/Алертинг
Híbrido
ELK para pesquisa em texto cheio/faceta, Loki para armazenamento de escala barata e consultas rápidas; corelação com métricas/pistas em Grafana.
3) Fluxo de dados e níveis de processamento
1. Coleta: arquivos tail tail, jornald, syslog, contêineres stdout, HTTP.
2. Enriquecimento: timestamp normalização, host/pod/namespace, eng (prod/estágio), release, commit SHA, trace/span id.
3. Parsing: JSON → flat fields; grok/regex; Formatos Nginx/Envoy; esquemas de pagamento (códigos de erro PSP).
4. Filtragem/redação: cortar PII (PAN, CVV, e-mail, endereços), segredos, tokens.
5. Roteiro: por tenant/service/nível logístico; hot/warm/cold; no armazenamento S3/objeto.
6. Armazenamento e retenções: política de TTL por classe de dados.
7. Acesso/Analista/Alerta.
4) ELK: soluções-chave
4. 1 Logstash/Beats
Use o Beats/Fluent Bit em nodes para coletor leve, o Logstash como um ETL central (grok, disect, mutate, geoip, translate).
Poulas Logstash: ingest-ETL, security-ETL, payments-ETL - para isolar as cargas.
4. 2 Elasticsearch
Charding: Direcione-se para £20-50 GB por chard; Evite o Shard-Bang.
Estratégia de índice: 'logs- <tenant> - <service> -YYYY. MM. DD 'ou data-striam; rollover em tamanho/tempo.
- hot: SSD, 1-7 dias; warm: HDD, 7-30 dias; cold: volume; frozen: custo mínimo com acesso mais lento.
- Mappings: Tipifique severamente os campos, limite 'fielddata' e crie campos dinâmicos.
- Dinheiro e consultas: filtros para campos de keyword, equipamentos com cuidado; pin-to-hot para buscas de alta frequência.
4. 3 Kibana
Espaços (Spaces) para a multi-tenência.
Saved searches, Lens/TSVB, threshold/metric-alerts.
RBAC índice-pattern ('logs-tenant-').
5) Loki: soluções essenciais
5. 1 Modelo de editoras
As editoras são o índice Loki. Use «cluster», «namespace», «app», «level», «eng», «tenant».
Campos de alta vitalidade (uid, request _ id) - na linha; retire quando solicitado através de LogQL '| =', '| json', '| regexp'.
5. 2 Componentes
Promtail: сбор stdout, files, journald; parsers (JSON, regex, cri).
Distribuidor/Ingester/Querier/Query-frontend: zoom em papéis; O cachê de solicitações.
O objeto de armazenamento (S3/GCS/MinIO) para armazenamento de logs de chank a longo prazo.
5. 3 LogQL técnicas
Grep rápido: ' Парсинг JSON: `{app="api"} | json | code="5xx" | unwrap duration | avg()` Correlação com métricas: 'rate ( 6) Comparação ELK vs Loki (resumo) Busca/agregação: ELK mais forte para pedidos complexos de texto completo e faceta; Loki - grep-like, rápido e barato. 7) Segurança e Complacência Edição PII na borda (shipper): disfarce PAN, e-mail, telefone, endereços, tokens. 8) Confiabilidade e banda larga Tampão e backpressure: arquivos/discos locais dos agentes; retrai com backoff exponencial. 9) Desempenho e sintonização 10) FinOps para logs (custo) Reduzir a radicalidade dos campos/editoras. 11) Correlação com métricas e pistas (Observabilidade 3-em-1) Trace-ID/Span-ID em cada logs (middleware nas passarelas API e nos serviços). 12) Multi-tenência e isolamento Namespace-based isolamento (K8s labels), índice-pattern/editoras individuais. 13) Monitoramento e SLO para a própria linha de montagem SLO ingest: «99. 9% dos logs foram entregues <X segundos". 14) Esquemas de implantação típicos Managed: Elasticsearch Service/Opensearch, Grafana Cloud Loki. 15) Exemplos de configuração 15. 1 Promtail (K8s, CRI JSON) 15. 2 Logstash (ingest e camuflagem) 16) Alerting e dashboards (modelos) Ошибки API: `rate({app="api",level="error"}[5m]) > threshold` → PagerDuty/Telegram. 17) Verificações de qualidade (logs-QA) Contratos de loging: formato JSON, campos obrigatórios ('ts', 'level', 'service', 'eng', 'trace _ id', 'msg'). 18) Erros frequentes e anti-pattern As editoras Loki de alta vitalidade ('user _ id', 'request _ id') → uma explosão de memória. 19) Plano de implementação (iterações) 1. MVP: agentes + um pipline (aplicativos), dashboards básicos, edição PII. 20) Folha de cheque de lançamento em proda 21) Mini-FAQ O que escolher é ELK ou Loki?
Custo: Loki muitas vezes é mais barato em grandes volumes (armazenamento de objetos + índice menor).
Dificuldade de operação: ELK requer disciplina de índice/ILM, javu-hip; A Loki é uma disciplina de editoras.
Correlação com métricas/pistas: Loki integra-se naturalmente com o vidro Grafana/OTel; O ELK também é capaz, mas mais frequentemente através da integração.
TLS in-transit, mTLS entre agentes e pneus.
RBAC: para-tenant índices/editoras; isolamento de neimspace/espaços.
Secret hygiene: variáveis de ambiente sem segredos, gerentes de segredo individuais.
Legal Hold: mecanismo de congelamento de segmentos/índices; write-once para períodos de disputa.
Remoção/Retensas: Políticas de TTL por classe de dados (prod/stateful/pagamentos/auditoria).
Auditoria dos trailers de acesso aos logs.
Idempotency: campos 'ingest _ id '/' jobs _ id' para evitar duplicações em repetições.
HA: Mínimo de 3 nodes para os mestres/ingestores de ES Loki; antiaffinity по AZ.
Quotas e rate-limits por tenant/service; protecção contra «tempestades» de loging.
O padrão de nível de logs é 'ERRO' limitado, 'DEBUG' apenas temporariamente através de bandeiras dinâmicas.
Loki:
Sampling DEBUG e «Logs Sweeeecks» dinâmicos.
Rotação: hot curto, cold longo em objeto.
Deduplicação e mensagens consolidadas (batch).
Arquivamento de logs raramente usados em classes de armazenamento baratas.
Dashboard valor: volume/data striam/editoras/índices/tenentes.
OpenTelemetry: contexto único; exportadores para Tempo/Jaeger, métricas para Prometheus/Mimir, logs para Loki/ELK.
Cenários rápidos: «alert por métrica → salto em logs apropriados → salto na pista».
Separação de alertas/dashboards/retensia pelo tenante.
Billing de consumo: volume de ingest, armazenamento, consultas.
SLO de pesquisa: «p95 solicitações <Y segundos».
Métricas técnicas: queue depth, dropped logs, reprocess rate, erro rate parsers, falha ingester/ES nod.
Self-hosted K8s: StatefulSets para ES/Loki, anti-afinidade em AZ, PersistentVolumes, armazenamento de objetos.
Agentes Edge (aplicativos em regiões): tampão local + TLS para o canal central ingest.yaml scrape_configs:
- job_name: kubernetes-pods kubernetes_sd_configs:
- role: pod pipeline_stages:
- cri: {}
- json:
expressions:
level: level msg: message trace: trace_id
- labels:
level:
app:
namespace:
- match:
selector: '{namespace="prod"}'
stages:
- regex:
expression: '(?P<pan>\b[0-9]{12,19}\b)'
- replace:
expression: '(?P<pan>\b[0-9]{12,19}\b)'
replace: '[REDACTED_PAN]'
relabel_configs:
- action: replace source_labels: [__meta_kubernetes_pod_label_app]
target_label: app
- action: replace source_labels: [__meta_kubernetes_namespace]
target_label: namespace
- action: replace source_labels: [__meta_kubernetes_pod_node_name]
target_label: noderuby input {
beats { port => 5044 }
}
filter {
json { source => "message" skip_on_invalid_json => true }
mutate { add_field => { "env" => "%{[kubernetes][labels][env]}" } }
PII mutate {
gsub => [
"message", "\b[0-9]{12,19}\b", "[REDACTED_PAN]",
"message", "(?i)(authorization: Bearer)([A-Za-z0-9\.\-_]+)", "\1[REDACTED_TOKEN]"
]
}
}
output {
elasticsearch {
hosts => ["https://es-hot-1:9200","https://es-hot-2:9200"]
index => "logs-%{[fields][tenant]}-%{[app]}-%{+YYYY. MM. dd}"
ilm_enabled => true ssl => true cacert => "/etc/ssl/certs/ca. crt"
user => "${ES_USER}"
password => "${ES_PASS}"
}
}
Alta de 5xx em Nginx/Envoy; drop ingest em agentes; crescimento da busca latency.
Linter logs na CI: proibição de novos campos de alta vitalidade sem concordância.
Serviços Canários - Geração de logs de referência para detecção precoce de regressões.
Campos dinâmicos em ES sem macpings → «explosão de índice».
DEBUG em venda «para sempre». Acenda por bandeiras e com TTL.
Falta de edição PII.
Uma linha de montagem «monolítico» comum para tudo é melhor para os segmentos de domínios.
2. Extensão: redes/infra-logs, alertas SLO, coreação com pistas.
3. FinOps: matriz de retenção, relatório de custo, otimização de editoras/índices.
4. Espaço Multi-Tenente, RBAC, Billing de Consumo.
5. Confiabilidade HA, disaster-drills, Legal Hold.