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.
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ètre | Défaut | Rôle |
|---|---|---|
| queue.type | memory | memory ou persisted |
| queue.max_bytes | 1024mb | taille maximale sur disque |
| queue.page_capacity | 64mb | taille des fichiers de page |
| queue.checkpoint.writes | 1024 | fré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 (filtrefingerprint) et passez-le endocument_idpour 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ètre | Rôle |
|---|---|
| dead_letter_queue.enable | active la DLQ (par pipeline) |
| dead_letter_queue.max_bytes | taille maximale (1024mb par défaut) |
| dead_letter_queue.storage_policy | drop_newer ou drop_older quand elle est pleine |
| dead_letter_queue.retain.age | duré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| Motif | Usage |
|---|---|
| Distributeur | un input, un pipeline par type de données |
| Isolation des sorties | une 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 |
| Collecteur | plusieurs pipelines convergent vers une sortie commune |
4. Performances #
Workers, lots, JVM.
Les réglages #
| Paramètre | Défaut | Conseil |
|---|---|---|
| pipeline.workers | nombre de cœurs | augmenter si le CPU est sous-utilisé et les filtres coûteux |
| pipeline.batch.size | 125 | 250 à 1000 pour des sorties Elasticsearch plus efficaces (plus de mémoire) |
| pipeline.batch.delay | 50 ms | rarement à modifier |
| jvm.options (-Xms / -Xmx) | 1g | identiques, 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 -40Bonne pratique : Mesurez avant de régler : comparezevents.in,events.outetduration_in_millispar filtre dans_node/statspour trouver le filtre qui coûte.
Mon suivi
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.
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...