GH GambleHub

Convoyeurs de loges : ELK et Loki

1) Pourquoi et quand : objectifs de loging

Observabilité et RCA : accélération de la débâcle, post mortem, contrôle SLO/SLA.
Sécurité et audit : traces d'accès, anomalies, enquêtes.
Mesures commerciales : conversion, flow de paiement, erreurs PSP, comportement des utilisateurs.
Conformité : stockage, masquage des IPI, politiques de rétention, Legal Hold.

Types de logs : applications, infrastructures (kubelet, kube-proxy, CNI, ingress), réseau, audit, paiement, événements Web, Nginx/Envoy, OBD.

2) architectures de haut niveau

Option A : ELK

Producers → Logshipper (Filebeat/Fluent Bit/Vector) → Logstash/Beats input → Elasticsearch → Kibana/Алертинг

Option B : Loki

Producers → Promtail/Fluent Bit → Loki distributor/ingester/querier → Grafana/Алертинг

Hybride

ELK pour la recherche par texte intégral/facettes, Loki pour le stockage évolutif bon marché et les requêtes de type grep rapide ; corelation avec métriques/pistes à Grafana.

3) Flux de données et niveaux de traitement

1. Collecte : Fichiers tail, journald, syslog, conteneurs stdout, HTTP.
2. Enrichissement : timestamp normalisation, host/pod/namespace, bou (prod/stage), release, commit SHA, trace/span id.
3. Parsing : JSON → flat fields ; grok/regex; Formats Nginx/Envoy ; les circuits de paiement (codes d'erreur PSP).
4. Filtrage/révision : couper PII (PAN, CVV, e-mail, adresses), secrets, jetons.
5. Itinérance : par tenant/service/niveau log ; hot/warm/cold; dans le stockage S3/objet.
6. Stockage et rétention : Politique TTL par classe de données.
7. Accès/Analyse/Alerte.

4) ELK : solutions clés

4. 1 Logstash/Beats

Utilisez Beats/Fluent Bit sur les noeuds pour un assembleur léger, Logstash comme ETL central (grok, dissect, mutate, geoip, translate).
Pools Logstash : ingest-ETL, security-ETL, payments-ETL - pour isoler les charges.

4. 2 Elasticsearch

Chardonnages : orientez-vous vers un ~ de 20-50 Go par shard ; évitez l'explosion du shard.
Stratégie d'index : 'logs- <tenant> - <service> -YYYY. MM. DD'ou strimes de données ; rollover par taille/temps.

ILM (hot/warm/cold/frozen):
  • hot : SSD, 1-7 jours ; warm : HDD, 7-30 jours ; cold : volumineux ; frozen : coût minimum avec accès plus lent.
  • Mappings : Typez rigidement les champs, limitez 'fielddata' et créez des champs dynamiques.
  • Cache et requêtes : filtres par champ keyword, agrégats - soigneusement ; pin-to-hot pour la recherche haute fréquence.

4. 3 Kibana

Espaces (Spaces) pour la multitenance.
Searches, Lens/TSVB, threshold/métriques-alertes.
RBAC par index-patterns (« logs-tenant- »).

5) Loki : des solutions clés

5. 1 Modèle de label

Les labels sont un « index » de Loki. Utilisez une faible cardinalité : 'cluster', 'namespace', 'app', 'level', 'bou', 'tenant'.
Les champs à haute cardinalité (uid, request_id) sont dans la ligne ; Extraire lors de la requête via LogQL '| =', '| json', '| regexp'.

5. 2 Composants

Promtail: сбор stdout, files, journald; parser (JSON, regex, cri).
Distributor/Ingester/Querier/Query-frontend : mise à l'échelle par rôle ; mise en cache des requêtes.
Objet de stockage (S3/GCS/MinIO) pour le stockage à long terme des logs de chunk.

5. 3 réceptions LogQL

Grep rapide : '{app = « payments », level = » error »} | = « declined »'

Парсинг JSON: `{app="api"} | json | code="5xx" | unwrap duration | avg()`

Corrélation avec les métriques : 'rate ({app = « nginx »} | = « 200 » [5m])'

6) Comparaison ELK vs Loki (en résumé)

Recherche/agrégation : ELK est plus fort pour les requêtes complexes en texte intégral et facettes ; Loki - grep-like, rapide et bon marché.
Coût : Loki est souvent moins cher sur de gros volumes (stockage objet + indice plus petit).
Complexité de l'exploitation : ELK exige une discipline par index/ILM, Javu-hipam ; Loki est une discipline par label.
Corrélation métrique/trace : Loki s'intègre naturellement à la pile Grafana/OTel ; ELK sait aussi, mais plus souvent par l'intégration.

7) Sécurité et conformité

Édition PII au bord (shipper) : masquer PAN, e-mail, téléphone, adresses, jetons.
TLS en transit, mTLS entre les agents et les pneumatiques.
RBAC : index/labels per-tenant ; isolation des espaces/neimspaces.
Secrets hygiene : variables d'environnement sans secrets, gestionnaires de secrets individuels.
Legal Hold : mécanisme de gel des segments/indices ; write-once pour les périodes controversées.
Suppression/rétention : politiques TTL par classe de données (prod/stateful/paiements/audit).
Audits-trails d'accès aux logs.

8) Fiabilité et bande passante

Tamponnage et backpressure : fichiers/disques locaux des agents ; Retrai avec backoff exponentiel.
Idempotency : champs 'ingest _ id '/' log _ id' pour éviter les prises lors des répétitions.
HA : minimum de 3 noeuds pour les maîtres/ingénieurs ES Loki ; antiaffinity по AZ.
Quotas et limites de taux par tenant/service ; protection contre les « tempêtes » de logage.
Schéma de niveau des logs : 'ERROR' limité, 'DEBUG' uniquement temporairement via les drapeaux dynamiques.

9) Performance et tuning

ELK:
  • JVM heap 50 % RAM (mais ≤ ~ 30-32 Go par noeud), page cache est important.
  • Rollover intelligent (20-50 Go/shard), 'refresh _ interval' ↑ pour les index ingest.
  • Dans Logstash, éviter le grok « lourd » ; si possible, logigation JSON à la source.
Loki:
  • Le bon label est la clé de la vitesse.
  • Les grandes cuves → moins chères à stocker, mais la mémoire est plus chère chez ingester ; équilibrer.
  • Query-frontend + cache (mem/Redis) pour les requêtes répétées.

10) FinOps pour les loges (coût)

Baisse de la cardinalité des champs/labels.
Sampling DEBUG et les « logs-swichs » dynamiques.
Rotation : court hot, long cold en objet.
Déduplication et messages consolidés (batch).
Archivez les logs rarement utilisés dans des classes de stockage bon marché.
Дашборд du coût : объем/дата-стримы/лейблы/индексы/тенанты.

11) Corrélation avec les métriques et les pistes (Observability 3-in-1)

Trace-ID/Span-ID dans chaque journal (middleware sur les API passerelles et dans les services).
OpenTelemetry : un contexte unique ; exportateurs en Tempo/Jaeger, métriques en Prometheus/Mimir, loges en Loki/ELK.
Scénarios rapides : « alerte métrique → sauter dans les loges correspondantes → sauter dans la piste ».

12) Multi-ténacité et isolation

Isolation à base de namespace (K8s labels), modèles d'index/labels distincts « tenant ».
Diviser les alerts/dashboards/rétentions par tenant.
Facturation par consommation : volume ingest, stockage, demandes.

13) Surveillance et SLO pour le convoyeur lui-même

SLO ingest: «99. 9 % des logs ont été livrés <X secondes".
SLO de recherche : « p95 requêtes <Y sec ».
Métriques techniques : queue depth, dropped logs, taux de reprise, error rate parser, défaut d'ingester/ES nod.

14) Schémas types de déploiement

Managed: Elasticsearch Service/Opensearch, Grafana Cloud Loki.
Self-hosted K8s : StatefulSets pour ES/Loki, anti-affinité par AZ, PersistentVolumes, stockage d'objets.
Agents Edge (applications dans les régions) : tampon local + canal TLS sur l'ingest central.

15) Exemples de configurations

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 et masquage)

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 et dashboards (modèles)

Ошибки API: `rate({app="api",level="error"}[5m]) > threshold` → PagerDuty/Telegram.
Sursaut de 5xx dans Nginx/Envoy ; drop ingest chez les agents ; croissance de la recherche de latitude.

Dashboards :
  • Volume de logs par service/tenants.
  • Top patterns d'erreur (code/exception/endpoint).
  • Coût par classe/classe de stockage.

17) Contrôles de qualité (log-QA)

Contrats logiques : format JSON, champs obligatoires ('t',' level ',' service ',' bou ',' trace _ id ',' msg ').
Linter des loges à CI : interdiction de nouveaux champs à haute cardinalité sans accord.
Services Canaries : génération de logs de référence pour la détection précoce des régressions.

18) Erreurs fréquentes et anti-modèles

Les labels Loki à haute cardinalité ('user _ id', 'request _ id') → une explosion de mémoire.
Les champs dynamiques dans ES sans mapping → « explosion d'index ».
DEBUG dans la vente « pour toujours ». Allumez par drapeau et avec TTL.
Absence d'édition PII.
Un convoyeur commun « monolithique » pour tout - les meilleurs segments par domaine.

19) Plan de mise en œuvre (itérations)

1. MVP : agents + one pipline (applications), dashboards de base, édition PII.
2. Extension : réseaux/infra-logs, alertes SLO, corelation avec pistes.
3. FinOps : matrice de rétention, rapport coût, optimisation des labels/indices.
4. Multi-tenant : espaces, RBAC, facturation par consommation.
5. Fiabilité : HA, disaster-drills, Legal Hold.

20) Chèque de démarrage en prod

  • Format JSON et champs obligatoires dans tous les services.
  • Masque PII sur agent/ingest.
  • Politiques de rétention/ILM ou bucket-lifecycle.
  • RBAC/espaces/tenants.
  • SLO ingest/search et alerte.
  • Logs canaris et essai de charge.
  • Dashboards de valeur et rapport sur les propriétaires de services.
  • Runbooks : « Que faire si l'ingest tombe/recherche lente/chardes rouges ».

21) Mini-FAQ

Que choisir - ELK ou Loki ?

Contact

Prendre contact

Contactez-nous pour toute question ou demande d’assistance.Nous sommes toujours prêts à vous aider !

Telegram
@Gamble_GC
Commencer l’intégration

L’Email est obligatoire. Telegram ou WhatsApp — optionnels.

Votre nom optionnel
Email optionnel
Objet optionnel
Message optionnel
Telegram optionnel
@
Si vous indiquez Telegram — nous vous répondrons aussi là-bas.
WhatsApp optionnel
Format : +code pays et numéro (ex. +33XXXXXXXXX).

En cliquant sur ce bouton, vous acceptez le traitement de vos données.