GH GambleHub

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.

ILM (hot/warm/cold/frozen):
  • 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.
Loki:
  • 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.

Dashboard:
  • 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?

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Telegram
@Gamble_GC
Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.