Logstash pour les devs - 22 - Monitoring Logstash : metriques et alertes

Surveiller Logstash avec l'API de monitoring, Metricbeat et Kibana. Metriques JVM, throughput et latence.

  1. 01 Logstash pour les devs - 00 - Pourquoi Logstash existe encore en 2026
  2. 02 Logstash pour les devs - 01 - L'Elastic Stack de A a Z
  3. 03 Logstash pour les devs - 02 - Installer Logstash avec Docker en 5 minutes
  4. 04 Logstash pour les devs - 03 - Anatomie d'un pipeline Logstash
  5. 05 Logstash pour les devs - 04 - Inputs stdin et file : lire des donnees locales
  6. 06 Logstash pour les devs - 05 - Input Beats : recevoir des logs de Filebeat
  7. 07 Logstash pour les devs - 06 - Inputs HTTP, TCP et UDP : recevoir des donnees réseau
  8. 08 Logstash pour les devs - 07 - Inputs Kafka et JDBC : sources avancees
  9. 09 Logstash pour les devs - 08 - Les codecs : decoder et encoder les donnees
  10. 10 Logstash pour les devs - 09 - Le filtre Grok : parser n'importe quel log
  11. 11 Logstash pour les devs - 10 - Le filtre Dissect : parser sans regex
  12. 12 Logstash pour les devs - 11 - Le filtre Mutate : transformer les champs
  13. 13 Logstash pour les devs - 12 - Filtres Date et GeoIP : temps et geolocalisation
  14. 14 Logstash pour les devs - 13 - Filtres KV, JSON et XML : parser les formats structures
  15. 15 Logstash pour les devs - 14 - Le filtre Ruby : quand les autres ne suffisent pas
  16. 16 Logstash pour les devs - 15 - Filtres Aggregate et Metrics : correler les événements
  17. 17 Logstash pour les devs - 16 - Conditionnels et contrôle de flux
  18. 18 Logstash pour les devs - 17 - Output Elasticsearch : envoyer les donnees
  19. 19 Logstash pour les devs - 18 - Outputs file, stdout et les autres
  20. 20 Logstash pour les devs - 19 - Gerer le multiline : stack traces et logs multi-lignes
  21. 21 Logstash pour les devs - 20 - Pipelines multiples et pipeline-to-pipeline
  22. 22 Logstash pour les devs - 21 - Performance et tuning Logstash
  23. 23 Logstash pour les devs - 22 - Monitoring Logstash : metriques et alertes
  24. 24 Logstash pour les devs - 23 - Dead Letter Queue : ne plus perdre d'événements
  25. 25 Logstash pour les devs - 24 - Sécurité Logstash : SSL, auth et secrets
  26. 26 Logstash pour les devs - 25 - Debugger un pipeline Logstash
  27. 27 Logstash pour les devs - 26 - Tester ses pipelines avant la prod
  28. 28 Logstash pour les devs - 27 - Cas pratique : centraliser des logs applicatifs
  29. 29 Logstash pour les devs - 28 - Cas pratique : ETL avec Logstash et PostgreSQL
  30. 30 Logstash pour les devs - 29 - Cas pratique : enrichir des donnees en temps réel
  31. 31 Logstash pour les devs - 30 - Logstash en production : architecture et bonnes pratiques
  32. 32 Logstash pour les devs - 31 - Glossaire Logstash de A a Z

22 - Monitoring Logstash : metriques et alertes

Ce que tu vas apprendre

  • Les endpoints de l'API de monitoring Logstash
  • Les metriques a surveiller (JVM, throughput, queues)
  • Configurer Metricbeat pour collecter les metriques
  • Les seuils d'alerte recommandes
  • Lire les hot threads pour diagnostiquer les lenteurs

Prerequisites

  • Un pipeline en fonctionnement
  • Avoir compris le tuning (voir article 21)

Pourquoi monitorer Logstash

Un pipeline qui tourne ne veut pas dire un pipeline qui va bien. J'ai eu un Logstash en prod qui traitait 10 000 events/seconde pendant des semaines. Puis un jour, le heap usage a grimpe a 95%, le garbage collector s'est mis a tourner en boucle, et le throughput est tombe a 500 events/seconde. Sans monitoring, on aurait mis des heures a comprendre. Avec les metriques, on a vu le problème en 2 minutes : un nouveau format de log generait des événements 10x plus gros que la normale.

L'API de monitoring

Logstash expose une API REST sur le port 9600.

Sante générale

bashcurl -s http://localhost:9600/ | python3 -m json.tool
json{
  "host": "logstash",
  "version": "8.17.0",
  "status": "green",
  "pipeline": {
    "workers": 4,
    "batch_size": 125
  }
}

status : green (tout va bien), yellow (degradation), red (problème).

Statistiques du noeud

bashcurl -s http://localhost:9600/_node/stats | python3 -m json.tool

Réponse (abregee, les champs importants) :

json{
  "jvm": {
    "mem": {
      "heap_used_percent": 42,
      "heap_used_in_bytes": 440401920,
      "heap_max_in_bytes": 1073741824
    },
    "gc": {
      "collectors": {
        "young": { "collection_count": 234, "collection_time_in_millis": 1200 },
        "old": { "collection_count": 3, "collection_time_in_millis": 450 }
      }
    },
    "threads": {
      "count": 42
    }
  },
  "process": {
    "cpu": {
      "percent": 35
    }
  },
  "events": {
    "in": 1500000,
    "filtered": 1500000,
    "out": 1500000,
    "duration_in_millis": 450000,
    "queue_push_duration_in_millis": 2000
  }
}

Statistiques par pipeline

bashcurl -s http://localhost:9600/_node/stats/pipelines | python3 -m json.tool

Donne les metriques par pipeline quand tu utilises des pipelines multiples. On l'a vu dans l'article 21.

Hot threads

bashcurl -s http://localhost:9600/_node/hot_threads?human=true

Affiche les threads qui consomment le plus de CPU. Si un thread passe 80% de son temps dans org.jruby.RubyRegexp, c'est Grok qui rame.

Les metriques a surveiller

Metriques critiques

Metrique Seuil d'alerte Signification
jvm.mem.heap_used_percent > 85% Risque d'OutOfMemory
jvm.gc.old.collection_time > 5s sur 1 min GC bloque le pipeline
events.out chute > 50% Le pipeline ne delivre plus
queue.events_count (persistent) > 80% de max_bytes La queue se remplit, l'output ne suit pas

Metriques de debit

Metrique Ce que ca mesure
events.in Événements reçus par les inputs
events.filtered Événements passes par les filtres
events.out Événements envoyes par les outputs
events.duration_in_millis Temps total passe dans le pipeline

Si events.in >> events.out, les événements s'accumulent. Soit la queue grandit (persistent), soit ils sont droppes (memory queue pleine).

Metriques JVM

Metrique Ce que ca mesure
jvm.mem.heap_used_percent Pourcentage de heap utilisee
jvm.gc.young.collection_count Nombre de GC mineures
jvm.gc.old.collection_count Nombre de GC majeures (lentes)
jvm.gc.old.collection_time_in_millis Temps passe en GC majeure

Les GC young sont normales et rapides (quelques ms). Les GC old sont lentes (dizaines/centaines de ms) et bloquent le pipeline. Si le nombre de GC old augmente, la heap est trop petite.

Monitoring avec Metricbeat

Pour historiser les metriques et les afficher dans Kibana, utilise Metricbeat avec le module Logstash.

compose.yaml avec Metricbeat

yamlservices:
  # ... elasticsearch, logstash, kibana ...

  metricbeat:
    image: docker.elastic.co/beats/metricbeat:8.17.0
    container_name: metricbeat
    user: root
    volumes:
      - ./metricbeat/metricbeat.yml:/usr/share/metricbeat/metricbeat.yml:ro
    depends_on:
      elasticsearch:
        condition: service_healthy
    command: ["metricbeat", "-e", "-strict.perms=false"]

metricbeat.yml

yamlmetricbeat.modules:
  - module: logstash
    metricsets: ["node", "node_stats"]
    period: 10s
    hosts: ["logstash:9600"]

  - module: elasticsearch
    metricsets: ["node", "node_stats"]
    period: 10s
    hosts: ["elasticsearch:9200"]

output.elasticsearch:
  hosts: ["elasticsearch:9200"]

setup.kibana:
  host: "kibana:5601"

setup.dashboards.enabled: true

Metricbeat collecte les metriques de Logstash toutes les 10 secondes et les envoie dans Elasticsearch. Les dashboards pre-configures apparaissent dans Kibana sous "Dashboard" > "Metricbeat Logstash".

Alertes recommandees

En production, configure des alertes dans Kibana (Stack Management > Rules) :

Alerte Condition Action
Heap critique heap_used_percent > 85% pendant 5 min Slack + PagerDuty
Throughput chute events.out < 50% de la moyenne 1h Slack
GC old excessive gc.old.collection_time > 5000ms sur 1 min Slack
Queue pleine queue.events_count > 80% max_bytes Slack
Pipeline stopped events.in == 0 pendant 5 min PagerDuty

La première alerte a configurer est "heap critique". Si la heap atteint 95%, le prochain pas c'est l'OutOfMemoryError et le crash. Sur paltemps.fr, c'est la seule alerte qui page en dehors des heures de bureau.

Diagnostic rapide : checklist

Quand quelque chose ne va pas, dans cet ordre :

1. curl localhost:9600/          → status green/yellow/red ?
2. curl localhost:9600/_node/stats
   → heap_used_percent > 80% ?  → augmenter la heap
   → gc.old en augmentation ?    → heap trop petite ou fuite memoire
   → events.in > events.out ?   → bottleneck output ou queue
3. curl localhost:9600/_node/hot_threads
   → quel thread consomme ?     → Grok, Ruby, output ES ?
4. docker compose logs logstash --tail 50
   → erreurs Elasticsearch ?    → mapping conflict, cluster red
   → _grokparsefailure ?        → nouveau format de log

Résumé

  • L'API de monitoring sur le port 9600 expose la sante, les stats et les hot threads
  • Les metriques critiques : heap usage, GC old, events in/out, queue size
  • Metricbeat avec le module Logstash historise les metriques dans Elasticsearch
  • Les dashboards Metricbeat pre-configures donnent une vue immediate dans Kibana
  • Première alerte a configurer : heap > 85% pendant 5 minutes
  • Diagnostic rapide : status -> stats -> hot_threads -> logs

Precedent : 21 - Performance et tuning | Suivant : 23 - Dead Letter Queue

Sources

Réservez un audit gratuit de 30 minutes. Je vous montre concrètement ce qu'on peut automatiser.