Regexp : filtre des fichiers log
Lynow
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
J'utilise Logstash pour filtrer mes logs, avec différents types de fichiers à lire. J'ai donc ajouté de multiples filtres pour sélectionner les bons fichiers concernés.
Voici le dernier filtre que j'ai ajouté :
L'idée est donc : si le domaine imbriqué
Cela ne fonctionne pas, par contre il n'y a pas d'erreur de syntaxe, et donc pas de logs. Les données ne sont pas envoyées (je le vois dans l'output de logstash).
Est-il possible de savoir où est mon erreur ?
J'utilise Logstash pour filtrer mes logs, avec différents types de fichiers à lire. J'ai donc ajouté de multiples filtres pour sélectionner les bons fichiers concernés.
Voici le dernier filtre que j'ai ajouté :
if [agent][name] != "host" and [location] !~ "/var/log/sites-web/.*\.log" { ... }
L'idée est donc : si le domaine imbriqué
[agent][name]est différent de "host" ET si le domaine
[location]est différent du Regex
"/var/log/sites-web/.*\.log", c'est-à-dire tous les fichiers finissants par .log dans le chemin indiqué.
Cela ne fonctionne pas, par contre il n'y a pas d'erreur de syntaxe, et donc pas de logs. Les données ne sont pas envoyées (je le vois dans l'output de logstash).
Est-il possible de savoir où est mon erreur ?
7 réponses
Bonjour
peux tu donner des exemples de chemins que tu voudrais voir "matcher" avec la regex et des exemples de que tu voudrais voir "ne pas matcher"
peux tu donner des exemples de chemins que tu voudrais voir "matcher" avec la regex et des exemples de que tu voudrais voir "ne pas matcher"
Salut,
tu as essayé en forçant du pattern matching ou en mettant ^ au début ?
Est-ce que ton langage autorise les guillemets comme séparateur de regex ?
tu as essayé en forçant du pattern matching ou en mettant ^ au début ?
Est-ce que ton langage autorise les guillemets comme séparateur de regex ?
Oui et vérifie que ce que tu testes n'a pas un blanc à la fin, par exemple ou purge les blancs en début et fin avec un truc comme ça :
Pour forcer du pattern matching, ajoute 'm' devant ton guillemet ouvrant :
[LOCATION] =~ s/^\s+|\s+$//g;
Pour forcer du pattern matching, ajoute 'm' devant ton guillemet ouvrant :
[LOCATION] !~ m"/var/log/sites-web/.*\.log"
Je tiens à préciser quelque chose, dans l'autre sens, cela fonctionne :
J'obtiens bien les données concernées.
if [location] =~ "/var/log/sites-web/.*\.log" { ... }
J'obtiens bien les données concernées.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tu ne serais pas dans ce cas-là, par hasard ?
https://forums.commentcamarche.net/forum/affich-16025052-shell-condition
https://forums.commentcamarche.net/forum/affich-16025052-shell-condition
Quand on veut tester ce que peut donner une regex, il y a des sites en ligne spécialisés.
Le mieux est d'en trouver un qui utilise le même moteur de regex que soi (il y a quelques subtilités d'un moteur à l'autre....)
Là j'ai pas trouvé, donc j'ai utilisé regex101 avec son moteur par défaut.
Cette regex, sera très restrictive
Par contre s'il manque ne serait ce qu'un chiffre, ça ne matche pas
Voir ici ce que ça donne https://regex101.com/r/tTyLg5/1
Le mieux est d'en trouver un qui utilise le même moteur de regex que soi (il y a quelques subtilités d'un moteur à l'autre....)
Là j'ai pas trouvé, donc j'ai utilisé regex101 avec son moteur par défaut.
Cette regex, sera très restrictive
^\/var\/log\/sites-web\/user\.cluster\.hosting\.ovh\.net-\d\d-\d\d-\d\d\d\d\.log$et correspond exactement au lien que tu as montré. Elle ne vérifie pas si la date est valide.
Par contre s'il manque ne serait ce qu'un chiffre, ça ne matche pas
Voir ici ce que ça donne https://regex101.com/r/tTyLg5/1
^ça veut dire que le texte doit être tester à partir du début, et pas quelque part au milieu
\/var\/log\/sites-web\/user\.cluster\.hosting\.ovh\.net-c'est "littéralement" la partie fixe de ton chemin, au détail prés que / et . sont des instructions en regex. Pour forcer la recherche du caractère / et du caractère . il faut mettre \ devant
\dreprésente un chiffre
\.log$littéralement .log et le $ signifie que la recherche doit se faire jusqu'à la fin du texte et pas s'arrêter quelque part au milieu
Voici un exemple de chemin :
Tous les fichiers sont similaires, il n'y a que la date qui change.
Ensuite, tous les autres types de logs tels que , , etc. ne doivent pas matcher.