Linee di montaggio ELK e Loki
1) Perché e quando: obiettivi di loging
Osservabilità e RCA: accelerazione del debag, post mortem, controllo SLO/SLA.
Sicurezza e controllo, tracce di accesso, anomalie, indagini.
Metriche aziendali: conversione, flow di pagamento, errori PSP, comportamento utente.
Compilazione: conservazione, occultamento di PII, criteri di retensione, Legale Hold.
Tipi di login: allegati, infrastrutture (kubelet, kube-proxy, CNI, ingress), rete, auditing, pagamenti, eventi web, Nginx/Avvoy, database.
2) Architetture ad alto livello
Opzione A: ELK
Producers → Logshipper (Filebeat/Fluent Bit/Vector) → Logstash/Beats input → Elasticsearch → Kibana/Алертинг
Opzione B: Loki
Producers → Promtail/Fluent Bit → Loki distributor/ingester/querier → Grafana/Алертинг
Ibrido
ELK per la ricerca su full-text/sfaccettature, Loki per lo storage scalabile a basso costo e query veloci coralità con metriche/piste a Grafana.
3) Flusso di dati e livelli di elaborazione
1. Raccolta: file tail tail, journald, syslog, contenitori stdout, HTTP.
2. Arricchimento: timestamp normalizzazione, host/pod/namespace, ev (prod/stage), release, commit SHA, trace/span id.
3. Parsing: JSON → flat fields; grok/regex; formati Nginx/Avvoy; diagrammi di pagamento (codici di errore PSP).
4. Filtro/redazione - Taglia PII (PAN, CVV, e-mail, indirizzi), segreti, token.
5. Routing: tenant/service/logo-livello; hot/warm/cold; in un archivio oggetti S3.
6. Memorizzazione e retensione: criterio TTL per classe di dati.
7. Accesso/Analisi/Alerta.
4) ELK: soluzioni chiave
4. 1 Logstash/Beats
Utilizzare Beats/Fluent Bit sui nodi per l'assemblatore leggero, Logstash come ETL centrale (grok, dissect, mutate, geoip, translate).
Pool Logstash: ingest-ETL, security-ETL, payments-ETL - per isolare i carichi.
4. 2 Elasticsearch
Sharding: Focalizzati su -20-50 GB per chard; Evitate lo shard-bang.
Strategia indice: "logs- <tenant> - <service> -YYYY. MM. DD'o data-striam; rollover per dimensione/tempo.
- hot: SSD, 1-7 giorni; warm: HDD, 7-30 giorni; cold: 3D; frozen: costo minimo con accesso più lento.
- Magping: timbrare i campi, limitare fielddata e creare campi dinamici.
- Cache e query: filtri per i campi keyboard, aggregazioni con attenzione; pin-to-hot per la ricerca ad alta frequenza.
4. 3 Kibana
Spazi per la multi-tenenza.
Saved searches, Lens/TSVB, threshold/metric-alert.
RBAC per indice-pattern («logs-tenant-»).
5) Loki: soluzioni chiave
5. 1 Modello etichetta
Le etichette sono l'indice Loki. Usa la bassa cardinalità: «cluster», «namespace», «app», «level», «env», «tenant».
I campi ad alta radicalità (uid, sollest _ id) sono nella riga; estrarre quando richiesto tramite «| =», «| json», «| regexp».
5. 2 Componenti
Promtail: сбор stdout, files, journald; parser (JSON, regex, cri).
Distributor/Ingester/Querier/Query-frontend: scalabilità dei ruoli; Cache delle richieste.
Object storage (S3/GCS/MinIO) per la conservazione a lungo termine dei cerniere.
5. 3 tecniche LogQL
Grep veloce: '{app = «payments», level =» errore»} | «declined»
Парсинг JSON: `{app="api"} | json | code="5xx" | unwrap duration | avg()`
Correlazione con metriche: 'rate ({app = «nginx»} | «200» [5m])'
6) Confronto ELK vs Loki (in breve)
Ricerca/aggregazione: ELK più forte per le richieste complesse di testo e sfaccettatura Loki - grep-like, veloce e economico.
Costo: Loki è spesso più economico su grandi volumi (magazzino oggetti + indice più basso).
Complessità operativa: ELK richiede la disciplina degli indici/ILM, Javu hip; Loki è una disciplina discografica.
Correlazione con metriche/piste: Loki si integra naturalmente con il vetro Grafana/OTEL; Anche ELK sa fare, ma più spesso attraverso l'integrazione.
7) Sicurezza e compliance
Versione PII (shipper) - Maschera PAN, e-mail, telefono, indirizzi, token.
TLS in-transit, tra agenti e pneumatici.
RBAC: per-tenant indici/etichette; isolamento di neimspace/spazi.
Secret hygiene - Variabili di ambiente senza segreti, singoli manager di segreto.
Legale Hold: meccanismo di congelamento segmenti/indici; write-once per i periodi controversi.
Rimozione/riscossione: criteri TTL per classe di dati (prod/stateful/pagamenti/verifiche).
Trailer di controllo per l'accesso ai fogli.
8) Affidabilità e larghezza di banda
Buffer e backpressure: file/unità locali per agenti retrai con backoff esponenziale.
Idempotency: campi «ingest _ id »/« log _ id» per evitare le repliche.
HA: minimo 3 nodi per maestri/ingestori ES Loki; antiaffinity по AZ.
Quote e rate-limits per tenant/service; Protezione contro le tempeste di logica.
Diagramma di livello: 'ERROR'limitato,' DEBUG 'solo temporaneamente tramite flag dinamici.
9) Prestazioni e tuning
ELK:- JVM heap 50% RAM (ma ≤ 30-32 GB), page cache è importante.
- Rollover intelligente (20-50 GB/shard), 'refresh _ interval'per gli indici ingest.
- In Logstash evitare «pesanti» grok; se possibile, la logica JSON all'origine.
- L'etichetta giusta è la chiave della velocità.
- Grandi chanci sono più economici da conservare, ma più costosi di memoria da ingester; bilanciate.
- Query-frontend + cache (meme/Redis) per le richieste ripetute.
10) FinOps per i fogli (costo)
Diminuisce la radicalità dei campi/etichette.
Sampling DEBUG e sweecky dinamici.
Rotazione: hot corto, cold lungo in oggetto.
Deduplicazione e messaggi consolidati (batch).
Archiviazione dei logi raramente utilizzati in classi di storage a basso costo.
Dashboard valore: volume/data-striam/etichette/indici/tenenti.
11) Correlazione con metriche e piste (Osservabilità 3-in-1)
Trace-ID/Span-ID in ogni login (middleware sui gateway API e nei servizi).
OpenTelemetry: un unico contesto; esportatori a Tempo/Jaeger, metriche a Prometheus/Mimir, logi a Loki/ELK.
Scenari veloci: «L'alert della metrica salta verso i loghi appropriati».
12) Multi-tenenza e isolamento
Isolamento Namespace-based (K8s labels), singolo indice-pattern/etichetta «tennis».
Divisione degli alert/dashboard/ritensh per tenante.
Bollo di consumo: ingest, storage, query.
13) Monitoraggio e SLO per la catena di montaggio
SLO ingest: «99. 9% delle unità consegnate <X sec.
SLO ricerca: «p95 query <Y secondi».
Metriche tecniche: queue depth, dropped logs, reprocess rate, errato rate parser, guasto ingester/ES node.
14) Diagrammi di distribuzione standard
Managed: Elasticsearch Service/Opensearch, Grafana Cloud Loki.
Self-hosted K8s: StatefulSets per ES/Loki, anti-affinity per AZ, PersistentVolumes, archivio oggetti.
Agenti Edge (applicazioni nelle regioni) - Buffer locali + TLS per l'ingest centrale.
15) Esempi di configurazione
15. 1 Promtail (K8s, CRI JSON)
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: node
15. 2 Logstash (ingest e maschera)
ruby 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}"
}
}
16) Alerting e dashboard (modelli)
Ошибки API: `rate({app="api",level="error"}[5m]) > threshold` → PagerDuty/Telegram.
Picco di 5xx in Nginx/Avvoy; drop ingest negli agenti; crescita della ricerca latency.
- Quantità di cassetti per servizi/tenanti.
- Top pattern di errore (codice/eccezione/endpoint).
- Il costo della retina/classe di deposito.
17) Controlli di qualità (loga-QA)
Contratti di loging: formato JSON, campi obbligatori («ts», «level», «service», «ev», «trace _ id», «msg»).
Linter dei Loghi CI - Vietare nuovi campi ad alta radicalità senza allineamento.
Servizi canari - Generazione di cavi di riferimento per il rilevamento precoce delle regressioni.
18) Errori frequenti e anti-pattern
Le etichette Loki ad alta radicalità ('user _ id', 'sollest _ id') hanno fatto esplodere la memoria.
I campi dinamici in ES senza magping → «esplosione indice».
DEBUG in vendita «per sempre». Accendi con flag e TTL.
Nessuna revisione PII.
Una catena di montaggio monolitico condivisa per tutto è meglio dei segmenti di dominio.
19) Piano di implementazione (iterazioni)
1. MVP: agenti + una pipline (allegati), dashboard base, revisione PII.
2. Estensione: reti/infra-logi, alert SLO, corellazione con piste.
3. FinOps: matrice retensica, report dei costi, ottimizzazione delle etichette/indici.
4. Spazio Multi-Tenant, RBAC, bollino di consumo.
5. Affidabilità: HA, disaster-drills, Legale Hold.
20) Assegno foglio di avvio in prode
- Formato JSON e campi obbligatori in tutti i servizi.
- Maschera PII sull'agente/ingest.
- Criteri di retensing/ILM o bucket-lifecycle.
- RBAC/spazio/tenanti.
- SLO ingest/ricerca e alert.
- Fogli di canna e test di carico.
- Dashboard di valore e rapporto sui proprietari dei servizi.
- Runbooks: «Cosa fare se ingest è caduto/ricerca lento/rosso chard».
21) Mini FAQ
Cosa scegliere, ELK o Loki?