RousselTMLEARNING

Article · Logstash : de la découverte à l'expertise

Logstash en production : files persistantes, DLQ et multi-pipelines

1. Ne rien perdre : la file persistante #

Mémoire ou disque.

Le problème #

Par défaut, Logstash garde les événements en transit dans une file en mémoire (queue.type: memory) : un arrêt brutal les perd. La file persistante (PQ) les écrit sur disque entre les inputs et les filtres : ils survivent à un redémarrage et absorbent les pics quand Elasticsearch ralentit.

Inputs, file persistante, filtres, sortie, DLQ.

Configuration #

# config/pipelines.yml
- pipeline.id: web
  path.config: /usr/share/logstash/pipeline/web.conf
  queue.type: persisted
  queue.max_bytes: 4gb          # au-delà : contre-pression vers les inputs
  path.queue: /var/lib/logstash/queue
  dead_letter_queue.enable: true
ParamètreDéfautRôle
queue.typememorymemory ou persisted
queue.max_bytes1024mbtaille maximale sur disque
queue.page_capacity64mbtaille des fichiers de page
queue.checkpoint.writes1024fréquence des points de reprise
Erreur courante : Croire que la PQ protège de tout : elle ne remplace ni un disque fiable, ni un émetteur qui sait réémettre. Un input UDP (syslog) perd toujours ce qui arrive pendant un arrêt ; placez Kafka devant si la perte est inacceptable.
Bonne pratique : La livraison est « au moins une fois » : en cas de reprise, un événement peut être réindexé. Calculez un identifiant stable (filtre fingerprint) et passez-le en document_id pour rendre l'écriture idempotente.

2. La dead letter queue #

Garder les rejets.

Principe #

Quand Elasticsearch refuse un document (erreur 400 ou 404, typiquement un conflit de mapping), la sortie elasticsearch l'écrit dans la DLQ au lieu de le jeter, avec la raison du refus. On le corrige ensuite et on le réinjecte.

# Pipeline de reprise : lit la DLQ du pipeline « web »
input {
  dead_letter_queue {
    path => "/usr/share/logstash/data/dead_letter_queue"
    pipeline_id => "web"
    commit_offsets => true
  }
}
filter {
  # la raison du rejet : [@metadata][dead_letter_queue][reason]
  mutate { convert => { "status" => "integer" } }
}
output { elasticsearch { hosts => ["http://elasticsearch:9200"] data_stream => true } }
ParamètreRôle
dead_letter_queue.enableactive la DLQ (par pipeline)
dead_letter_queue.max_bytestaille maximale (1024mb par défaut)
dead_letter_queue.storage_policydrop_newer ou drop_older quand elle est pleine
dead_letter_queue.retain.agedurée de conservation (ex. 7d)
À savoir : Seuls les refus « définitifs » vont en DLQ ; les erreurs temporaires (429, 503) sont réessayées sans fin par la sortie : c'est la contre-pression qui protège alors les données.

3. Plusieurs pipelines #

Isoler les flux.

pipelines.yml #

Un seul gros pipeline mélange les flux : un filtre lent ou une sortie en panne bloque tout. pipelines.yml déclare plusieurs pipelines indépendants, chacun avec ses workers, sa file et sa configuration.

- pipeline.id: entree
  config.string: |
    input { beats { port => 5044 } }
    output {
      if [event][dataset] == "nginx.access" { pipeline { send_to => ["web"] } }
      else if [event][category] == "authentication" { pipeline { send_to => ["securite"] } }
      else { pipeline { send_to => ["autres"] } }
    }
- pipeline.id: web
  path.config: /etc/logstash/conf.d/web.conf     # input { pipeline { address => "web" } }
  pipeline.workers: 4
- pipeline.id: securite
  path.config: /etc/logstash/conf.d/securite.conf
  queue.type: persisted
Un pipeline « entree » distribue vers trois pipelines spécialisés.
MotifUsage
Distributeurun input, un pipeline par type de données
Isolation des sortiesune sortie lente (archive S3) ne bloque pas Elasticsearch : chacune a son pipeline et sa PQ
Chemin bifurquéle même événement traité différemment pour deux destinations
Collecteurplusieurs pipelines convergent vers une sortie commune

4. Performances #

Workers, lots, JVM.

Les réglages #

ParamètreDéfautConseil
pipeline.workersnombre de cœursaugmenter si le CPU est sous-utilisé et les filtres coûteux
pipeline.batch.size125250 à 1000 pour des sorties Elasticsearch plus efficaces (plus de mémoire)
pipeline.batch.delay50 msrarement à modifier
jvm.options (-Xms / -Xmx)1gidentiques, 4 à 8 Go suffisent le plus souvent
curl -s localhost:9600/_node/stats/pipelines?pretty | jq '.pipelines.web.events'
curl -s localhost:9600/_node/hot_threads?human=true | head -40
Bonne pratique : Mesurez avant de régler : comparez events.in, events.out et duration_in_millis par filtre dans _node/stats pour trouver le filtre qui coûte.

📄 Logstash en production : files persistantes, DLQ et multi-pipelines →

Mon suivi

  • ⏱ Durée estimée : ≈ 9 min

Connectez-vous pour suivre votre progression et prendre des notes. Se connecter

💬 Questions sur cette leçon

Aucune question pour l'instant : soyez le premier à demander de l'aide ou à partager votre configuration.

Poser une question sur cette leçon →

Glossaire de la formation

Observabilité

La capacité à connaître l'état interne d'un système à partir des données qu'il émet.Ces données sont classées en 3 piliers : logsmétriquestracesprofil...

Elastic Common Schema (ECS)

Une spécification open source qui permet de structurer vos données de manière homogène dans l'écosystème Elastic.

Logstash

Moteur de collecte de données permettant de traiter, d'enrichir et de transformer les logs et autres événements avant de les indexer.

Access Log

Fichier de journalisation enregistrant les requêtes traitées par un serveur web (Apache, Nginx, Lighttpd, etc.). Il permet de tracer l'activité du ser...

Client IP

L'adresse IP de l'utilisateur effectuant la requête vers le serveur web. Lorsqu'un utilisateur passe par un Load Balancer ou un proxy (ex: Cloudflare)...

Timestamp

La date et l'heure exactes auxquelles la requête a été reçue par le serveur.Configuration : %t dans Apache, $time_local ou $time_iso8601 dans Nginx.

Request

La ligne de requête initiale du client. Elle comprend généralement la méthode HTTP (ex: GET), l'URL demandée et la version du protocole HTTP.Configura...

Status Code

Le code de statut HTTP final renvoyé par le serveur au client (ex : 200 pour un succès, 404 pour ressource non trouvée).Configuration : %>s dans Apach...

Size

Le volume des données renvoyées au client, mesuré en octets (généralement sans les en-têtes HTTP).Configuration : %b ou %O dans Apache, $body_bytes_se...

Referrer

L'URL de la page web depuis laquelle le client a cliqué ou suivi un lien pour accéder à la ressource actuelle.Configuration : %{Referer}i dans Apache,...

User-Agent

Les informations d'identification fournies par le client concernant son navigateur, son système d'exploitation et son appareil. Sa structure standard ...

Response Time

La durée totale prise par le serveur pour traiter la requête et renvoyer la réponse au client.Configuration : %D (microsecondes) ou %T (secondes) dans...

Articles recommandés

Bonnes pratiques Logstash : pipelines, performances, fiabilité et supervision

Bonnes pratiques Logstash : pipelines multiples, dissect plutôt que grok, conditionnels, persiste...

Logstash : enrichir, tester, superviser et déployer sur Kubernetes

Enrichir avec translate, geoip et elasticsearch, consommer Kafka, tester ses pipelines, supervise...

Logstash : gérer les plugins et adopter Elastic Common Schema (ECS)

Version écrite des leçons vidéo : lister, installer, mettre à jour et embarquer hors ligne les pl...

Logstash : rôle, concept de pipeline et installation

Version écrite des leçons vidéo : à quoi sert Logstash, comment fonctionne un pipeline (inputs, f...

Logstash : les entrées (inputs) et les sorties (outputs)

Version écrite des leçons vidéo : les inputs courants (beats, file, tcp/udp, http, kafka, jdbc) e...

Logstash : les filtres, grok et dissect

Version écrite des leçons vidéo : les filtres essentiels (mutate, date, json, kv, drop), le plugi...

Autres sources de logs et files d'attente : syslog, Fluent Bit, Kafka, Redis

Version écrite des leçons vidéo : collecter syslog, Fluent Bit et d'autres sources, puis insérer ...

Machine learning dans Elastic : détection d'anomalies et AIOps

Détecter automatiquement les comportements anormaux : jobs de détection d'anomalies, datafeeds, d...

Elastic Security : SIEM, règles de détection et investigation

Utiliser Elastic Security comme SIEM : sources de données ECS, types de règles de détection (quer...

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !