# Logstash - Méthode pour debugger les grokparsefailure

**URL:** <https://discuss.elastic.co/t/logstash-methode-pour-debugger-les-grokparsefailure/159353>\
**Category:** Discussions en français\
**Created:** [December 4, 2018, 12:11pm UTC](https://discuss.elastic.co/t/logstash-methode-pour-debugger-les-grokparsefailure/159353 "2018-12-04T12:11:56Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![MikaMinn](https://avatars.discourse-cdn.com/v4/letter/m/eb8c5e/32.png) [@MikaMinn](https://discuss.elastic.co/u/MikaMinn)\
**Post date:** [December 4, 2018, 12:11pm UTC](https://discuss.elastic.co/t/logstash-methode-pour-debugger-les-grokparsefailure/159353/1 "2018-12-04T12:11:56Z")

</div>

Bonjour à tous ! Je débute depuis plusieurs heures sur le parsing des log logstash.

C'est peut-être une question très anodine pour vous mais je cherche les "best practice" pour parser mes logs et surtout rechercher les erreurs.

J'ai tout fraichement réalisé un pattern grok et j'arrive à découper comme je le souhaite mais j'ai toujours un tag "grokparsefailure" . Dans ce cas je conclu que mon filter n'est pas "propre" ?  
Quel est le moyen le plus pratique pour repérer les defaux de grokparsefailure ?

J'ai bien lu les doc et je me suis bien documenté. Étant donner que je n'ai peut être pas la logique d'un développeur je suis passé au travers de quelque chose.

C'est une question plutôt général donc dans un premier temps je ne demande pas de vérifier mon fichier de conf logstash.

---

<div class="post-metadata">

**Author:** ![MikaMinn](https://avatars.discourse-cdn.com/v4/letter/m/eb8c5e/32.png) [@MikaMinn](https://discuss.elastic.co/u/MikaMinn)\
**Post date:** [December 4, 2018, 1:18pm UTC](https://discuss.elastic.co/t/logstash-methode-pour-debugger-les-grokparsefailure/159353/2 "2018-12-04T13:18:05Z")

</div>

Je viens de me rendre compte que le message n'étais pas affiché ! 😑

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [December 8, 2018, 1:39pm UTC](https://discuss.elastic.co/t/logstash-methode-pour-debugger-les-grokparsefailure/159353/3 "2018-12-08T13:39:05Z")

</div>

> [@MikaMinn](#):
>
> Dans ce cas je conclu que mon filter n'est pas "propre" ?

Oui. Ca veut dire que les expressions régulières ne peuvent pas s'appliquer à tes lignes.

> Quel est le moyen le plus pratique pour repérer les defaux de grokparsefailure ?

Dans Kibana il y a un Grok Debugger. Perso, j'aime beaucoup utiliser ça pour construire mon pattern Grok: [http://grokconstructor.appspot.com/](http://grokconstructor.appspot.com/)

---

<div class="post-metadata">

**Author:** ![MikaMinn](https://avatars.discourse-cdn.com/v4/letter/m/eb8c5e/32.png) [@MikaMinn](https://discuss.elastic.co/u/MikaMinn)\
**Post date:** [December 10, 2018, 8:31am UTC](https://discuss.elastic.co/t/logstash-methode-pour-debugger-les-grokparsefailure/159353/4 "2018-12-10T08:31:24Z")

</div>

Merci de ton retour,

> [@dadoonet](#):
>
> Oui. Çà veut dire que les expressions régulières ne peuvent pas s'appliquer à tes lignes.

C'est étrange parce que le découpage se fait correctement et comme je le souhaite. Avons nous la possibilité d’analyser à quel endroit le "parsing" ne s’effectue pas correctement ? Ou la meilleur des façons est de recommencer le fichier de conf petit à petit afin d'observer quand le grokparsefailure s’exécute ?

> [@dadoonet](#):
>
> Dans Kibana il y a un Grok Debugger. Perso, j'aime beaucoup utiliser ça pour construire mon pattern Grok: [http://grokconstructor.appspot.com/](http://grokconstructor.appspot.com/)

Oui j'ai justement utilisé Grokconstructor qui m'a été très utile pour monter dans un premier temps les regex.

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [December 11, 2018, 10:22am UTC](https://discuss.elastic.co/t/logstash-methode-pour-debugger-les-grokparsefailure/159353/5 "2018-12-11T10:22:49Z")

</div>

> C'est étrange parce que le découpage se fait correctement et comme je le souhaite.

Sans doute. **SAUF** pour la ligne en question qui est rejetée.

> Avons nous la possibilité d’analyser à quel endroit le "parsing" ne s’effectue pas correctement ?

Je ne sais pas si il y a un debugger d'expressions régulières. Peut-être que @colinsurprenant sait ça...  
En tout cas, déjà trouve la ligne qui ne fonctionne pas. Eventuellement partage là ici avec ton expression grok si tu n'y arrives pas.

---

<div class="post-metadata">

**Author:** ![MikaMinn](https://avatars.discourse-cdn.com/v4/letter/m/eb8c5e/32.png) [@MikaMinn](https://discuss.elastic.co/u/MikaMinn)\
**Post date:** [December 19, 2018, 1:38pm UTC](https://discuss.elastic.co/t/logstash-methode-pour-debugger-les-grokparsefailure/159353/6 "2018-12-19T13:38:37Z")

</div>

Merci de ton retour.

J'ai effectué un nouveau logstash from scratch et je construis mon filtre petit à petit et je viens de me rendre compte que j'ai un grokparsefailure rien qu'en taguant déjà les log. Donc c'est déjà ma première démarche qui n'est pas bonne.

Exemple : J'ai un serveur où je récupère en syslog des log radius et dhcp. Je veux dans un premier temps les taguer pour ensuite les "parser" comme je veux.

```auto
 filter{
  if [type] == "server-syslog" {
    grok {
    match => { "message" => "radiusd" }
    add_tag => "radiusd"
    }
    grok {
    match => { "message" => "dhcpd" }
    add_tag => "dhcpd"
    }
  }
}

```

Le tag s'effectue bien sur chaque log mais j'ai un

```
[0] "_grokparsefailure",

```

Quelqu'un peut me guider afin d'avoir les bonnes pratiques sur la construction de mes filters logstash ?

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [December 19, 2018, 1:54pm UTC](https://discuss.elastic.co/t/logstash-methode-pour-debugger-les-grokparsefailure/159353/7 "2018-12-19T13:54:58Z")

</div>

N'utilise pas la citation pour formater du code mais le bouton `</>`. J'ai édité ton post.

Ici le parsing `grok` ne fonctionne pas car ta ligne ne contient pas que le texte `dhcpd` mais autre chose. Il faut donc que tu fasses une expression régulière qui corresponde à une ligne qui contient `dhcpd`.

---

<div class="post-metadata">

**Author:** ![MikaMinn](https://avatars.discourse-cdn.com/v4/letter/m/eb8c5e/32.png) [@MikaMinn](https://discuss.elastic.co/u/MikaMinn)\
**Post date:** [December 19, 2018, 2:42pm UTC](https://discuss.elastic.co/t/logstash-methode-pour-debugger-les-grokparsefailure/159353/9 "2018-12-19T14:42:24Z")

</div>

D'accord et merci pour la correction de mon post.

Donc dans un premier temps j'effectue un parsing sur tout le message.

```
filter{
    if [type] == "syslog" {
         grok {
            match => { "message" => "%{SYSLOG5424PRI}%{SYSLOGTIMESTAMP}%{SPACE}%{WORD:Server_Name}%{SPACE}%{SYSLOGHOST:Service_Name}%{SYSLOG5424SD:ID_Service}%{NOTSPACE}%{GREEDYDATA:Message_du_log}" }
         }
         if [Service_Name] == "radiusd" {
             add_tag => "radiusd"
         }
         if [Service_Name] == "dhcpd" {
             add_tag => "dhcpd"
         }

 }
    } 

```

Est-ce que c'est la bonne manière de faire ?

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [December 19, 2018, 2:53pm UTC](https://discuss.elastic.co/t/logstash-methode-pour-debugger-les-grokparsefailure/159353/10 "2018-12-19T14:53:39Z")

</div>

Ca me semble une bonne idée.

---

<div class="post-metadata">

**Author:** ![MikaMinn](https://avatars.discourse-cdn.com/v4/letter/m/eb8c5e/32.png) [@MikaMinn](https://discuss.elastic.co/u/MikaMinn)\
**Post date:** [December 19, 2018, 3:06pm UTC](https://discuss.elastic.co/t/logstash-methode-pour-debugger-les-grokparsefailure/159353/11 "2018-12-19T15:06:59Z")

</div>

Arf logstash n'aime pas cette configuration il ne se lance pas. Je vais continuer à chercher.

---

<div class="post-metadata">

**Author:** ![MikaMinn](https://avatars.discourse-cdn.com/v4/letter/m/eb8c5e/32.png) [@MikaMinn](https://discuss.elastic.co/u/MikaMinn)\
**Post date:** [December 19, 2018, 4:12pm UTC](https://discuss.elastic.co/t/logstash-methode-pour-debugger-les-grokparsefailure/159353/12 "2018-12-19T16:12:51Z")

</div>

Je crois qu'effectuer des if dans grok n'est pas fonctionnel. Je dois trouver un moyen de séparer les logs en input je pense.

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [December 19, 2018, 4:43pm UTC](https://discuss.elastic.co/t/logstash-methode-pour-debugger-les-grokparsefailure/159353/13 "2018-12-19T16:43:11Z")

</div>

C'est pas dans grok c'est en dehors... Donc ça doit passer je pense.  
Tu as quoi comme erreur ?

---

<div class="post-metadata">

**Author:** ![MikaMinn](https://avatars.discourse-cdn.com/v4/letter/m/eb8c5e/32.png) [@MikaMinn](https://discuss.elastic.co/u/MikaMinn)\
**Post date:** [December 20, 2018, 9:19am UTC](https://discuss.elastic.co/t/logstash-methode-pour-debugger-les-grokparsefailure/159353/14 "2018-12-20T09:19:54Z")

</div>

J'ai approfondi la doc et j'ai observé qu'il était possible d'utilisé grok dans l'input. ET de cette manière ça marche 😊 . Alors pareil je ne sais pas si c'est la manière la plus propre.

```
input {
   syslog {
      type => "syslog"
      port => 514
      grok_pattern => "<%{POSINT:priority}>%{SYSLOGTIMESTAMP:timestamp} %{WORD:Server_Name} %{SYSLOGHOST:Service_Name}%{SYSLOG5424SD:ID_Service}: %{GREEDYDATA:Message_du_log}"
  }
}

filter {
   if [Service_Name] == "radiusd" {
     grok {
        match => { "Service_Name" => "radiusd" }
        add_tag => "radiusd"
     }
   }
   if [Service_Name] == "dhcpd" {
     grok {
        match => { "Service_Name" => "dhcpd" }
        add_tag => "dhcpd"
     }
   }
}

```

En tout cas merci @dadoonet pour ton coup de main et de te prendre le temps. Ca me permet de progresser sur la solution.

---

<div class="post-metadata">

**Author:** ![MikaMinn](https://avatars.discourse-cdn.com/v4/letter/m/eb8c5e/32.png) [@MikaMinn](https://discuss.elastic.co/u/MikaMinn)\
**Post date:** [December 24, 2018, 10:12am UTC](https://discuss.elastic.co/t/logstash-methode-pour-debugger-les-grokparsefailure/159353/15 "2018-12-24T10:12:52Z")

</div>

J'ai trouvé un article sur le [blog d'elasticsearch](https://www.elastic.co/blog/do-you-grok-grok). Qui explique la bonne manière d'identifier et debugger les grokparsefailure.  
Je le traduit et dépose ici. Cela pourra toujours servir 😃

> Bien qu'il soit très important de savoir à quelle vitesse votre modèle grok correspond à une entrée de log, il est également essentiel de comprendre ce qui se passe quand ce n'est pas le cas. Les matchs réussis peuvent avoir des performances très différentes de ceux qui échouent.
> 
> Lorsque grok ne match pas à un événement, il ajoute une balise à l'événement. Par défaut, cette balise est \_grokparsefailure.
> 
> Logstash vous permet ensuite d’acheminer ces events à un endroit où ils peuvent être comptés et examinés. Par exemple, vous pouvez écrire toutes les correspondances ayant échoué dans un fichier:

```auto
input { # ... }
filter {
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} \[%{IPV4:ip};%{WORD:environment}\] %{LOGLEVEL:log_level} %{GREEDYDATA:message}" }
  }
}
output {
  if "_grokparsefailure" in [tags] {
    # write events that didn't match to a file
    file { "path" => "/tmp/grok_failures.txt" }
  } else {
     elasticsearch { }
  }
}

```

Et un joyeux Noël à tout le monde 🙂 🤶

---

<div class="post-metadata">

**Author:** ![Marc-Antoine\_J](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/marc-antoine_j/32/39687_2.png) [@Marc-Antoine\_J](https://discuss.elastic.co/u/Marc-Antoine_J)\
**Post date:** [January 11, 2019, 5:58pm UTC](https://discuss.elastic.co/t/logstash-methode-pour-debugger-les-grokparsefailure/159353/16 "2019-01-11T17:58:38Z")

</div>

Personnellement j'ai un ELK en dévelopement et lorsque mes filtres en production ont des grokparsefailure, je met ces entrées dans un fichier log, je configure un filebeat en dev pour ce fichier et je déconstruit mon filtre en remplaçant la fin du filtre par "%{GREEDYDATA}". Je réimporte ensuite les entrées avec le filtre déconstruit jusqu'à ce que je trouve le morceau fautif.

Par exemple j'essaie mon filtre original:  
`%{TIMESTAMP_ISO8601:timestamp} \[%{IPV4:ip};%{WORD:environment}\] %{LOGLEVEL:log_level} %{GREEDYDATA:message}`

Si ça ne passe pas j'essaie:  
`%{TIMESTAMP_ISO8601:timestamp} \[%{IPV4:ip};%{WORD:environment}\] %{GREEDYDATA:restant}`

Puis:  
`%{TIMESTAMP_ISO8601:timestamp} \[%{IPV4:ip};%{GREEDYDATA:restant}`

Etc.

Jusqu'à ce que le \_grokparsefailure ne se produise plus. Puisque le "Greedydata" capture toujours le restant par défaut, lorsque ça passe c'est que la dernière portion enlevée ne fonctionnais pas.

Cela me permet souvent d'identifier la portion du filtre qui est fautive. 🙂

---

<div class="post-metadata">

**Author:** ![MikaMinn](https://avatars.discourse-cdn.com/v4/letter/m/eb8c5e/32.png) [@MikaMinn](https://discuss.elastic.co/u/MikaMinn)\
**Post date:** [January 16, 2019, 10:18am UTC](https://discuss.elastic.co/t/logstash-methode-pour-debugger-les-grokparsefailure/159353/17 "2019-01-16T10:18:56Z")

</div>

C'est effectivement la même méthode que j'utilise. Lorsque j'ai un peu plus saisie le fonctionnement de Logstash.  
Merci de ton retour !

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [February 13, 2019, 10:18am UTC](https://discuss.elastic.co/t/logstash-methode-pour-debugger-les-grokparsefailure/159353/18 "2019-02-13T10:18:58Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
