RousselTMLEARNING

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

Bonnes pratiques Logstash

1. Concevoir ses pipelines #

Séparer, simplifier, tester.

Plusieurs pipelines #

Pipeline Logstash
La file persistante protège contre la perte de données en cas de panne ou de lenteur de la sortie.
# config/pipelines.yml : un pipeline par flux, avec ses propres réglages
- pipeline.id: nginx
  path.config: "/etc/logstash/conf.d/nginx.conf"
  pipeline.workers: 4
  pipeline.batch.size: 250
  queue.type: persisted
  queue.max_bytes: 4gb
- pipeline.id: app
  path.config: "/etc/logstash/conf.d/app.conf"
  queue.type: persisted
  dead_letter_queue.enable: true
  • Un pipeline par type de flux : pannes et lenteurs ne se propagent pas d'un flux à l'autre.
  • Chaînez des pipelines avec les plugins pipeline input/output pour mutualiser des traitements.
  • Versionnez les fichiers et validez en CI avec --config.test_and_exit.

2. Filtres performants #

dissect, conditionnels et date.

Préférer dissect à grok #

filter {
  if [fields][type] == "nginx" {
    dissect {
      mapping => { "message" => '%{client_ip} - - [%{ts}] "%{method} %{uri} HTTP/%{http_ver}" %{status} %{bytes}' }
    }
    date   { match => ["ts", "dd/MMM/yyyy:HH:mm:ss Z"]  target => "@timestamp" }
    mutate { convert => { "status" => "integer"  "bytes" => "integer" }  remove_field => ["ts", "message"] }
  } else if [fields][type] == "app" {
    json { source => "message"  skip_on_invalid_json => true }
  }
  # grok seulement pour les formats variables, avec ancrage et motifs précis
  grok { match => { "message" => "^%{TIMESTAMP_ISO8601:ts} %{LOGLEVEL:level} %{GREEDYDATA:msg}$" }  tag_on_failure => ["_grokfail"] }
}
Bonne Pratique : dissect est nettement plus rapide que grok quand le format est fixe. Réservez grok aux formats irréguliers et ancrez toujours vos motifs (^...$).

3. Fiabilité et sécurité #

Ne rien perdre, ne rien exposer.

Sorties et DLQ #

output {
  elasticsearch {
    hosts => ["https://es01:9200", "https://es02:9200"]
    api_key => "${ES_API_KEY}"                       # secret dans le keystore Logstash
    ssl_certificate_authorities => ["/etc/logstash/ca.crt"]
    data_stream => "true"
    data_stream_type => "logs"  data_stream_dataset => "nginx"  data_stream_namespace => "prod"
  }
}
# Secrets : bin/logstash-keystore create && bin/logstash-keystore add ES_API_KEY
# Relire la dead letter queue pour corriger les rejets
input { dead_letter_queue { path => "/var/lib/logstash/dead_letter_queue"  pipeline_id => "app"  commit_offsets => true } }
Erreur Courante : Une sortie bloquée (Elasticsearch indisponible) sans file persistante fait perdre les événements ou bloque les entrées. Activez queue.type: persisted et dimensionnez queue.max_bytes.

4. Performances et supervision #

Mesurer avant de régler.

API de monitoring et réglages #

curl -s localhost:9600/_node/stats/pipelines?pretty | jq '.pipelines | to_entries[] | {id: .key, in: .value.events.in, out: .value.events.out}'
curl -s 'localhost:9600/_node/stats/jvm?pretty' | jq '.jvm.mem.heap_used_percent'
curl -s 'localhost:9600/_node/hot_threads?human=true' | head -30          # où le CPU est consommé
bin/logstash --config.test_and_exit -f /etc/logstash/conf.d/             # validation
RéglageConseil
pipeline.workersÉgal au nombre de cœurs ; plus si les filtres attendent des E/S
pipeline.batch.size125 par défaut ; 250 – 1000 pour de meilleures performances d'envoi
JVM heap-Xms = -Xmx, 4 – 8 Go typiques
pipeline.orderedDésactivez si l'ordre n'importe pas pour paralléliser
À savoir : Quand le débit augmente fortement, placez Kafka entre les collecteurs et Logstash pour absorber les pics et rejouer les données.

Schéma de référence et vérification rapide #

Visualiser le principe et le contrôler en ligne de commande.

Schéma de référence #

Statistiques de pipeline Logstash
Un écart durable entre in et out indique une sortie lente ou une file qui se remplit.

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

Mon suivi

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

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

✉️ Poser une question

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

Comprendre la notion de score

Le concept de score va permettre à Elasticsearch de classer vos documents par pertinence lors d u...

Comprendre Elastic Common Schema(ECS)

Comme toujours dans nos missions de conseil, nous recommandons aux entreprises d'uniformiser, de ...

Grail : Dynatrace Data Lakehouse

Désormais vous disposez dans Dynatrace (SaaS) d'un Data Lakehouse nommé Grail dont vous pouvez co...

C'est quoi l'observabilité

La capacité à connaître l'état interne d'un système à partir des données que cette dernière émet...

Les types de transactions dans les base de données

Cet article détaille les différences entre trois concepts essentiels dans l'exécution des instruc...

Différences entre Technologies et Services dans Dynatrace

Dans Dynatrace, les concepts de 'Technologie' et de 'Services' aident à organiser et surveiller l...

Dynatrace : Différences entre SQL Modifications, SQL Queries or Procedures, et SQL Transactions

Cet article détaille les différences entre trois concepts essentiels dans l'exécution des instruc...

Types de consommation de licence

Comprendre l'évolution de la facturation dans Dynatrace : la différence entre l'ancien modèle de ...

Les Types de Services Dynatrace : Comprendre et Optimiser Votre Surveillance Applicative

Découvrez les différents types de services que Dynatrace peut surveiller, leur rôle, et comment l...