Regexp : filtre des fichiers log

Fermé
Lynow - 17 févr. 2022 à 17:10
Whismeril Messages postés 19045 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 21 mai 2024 - 19 févr. 2022 à 11:02
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é :

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

Whismeril Messages postés 19045 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 21 mai 2024 912
17 févr. 2022 à 17:18
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"
0
Bonjour,

Voici un exemple de chemin :
/var/log/sites-web/user.cluster.hosting.ovh.net-02-02-2022.log


Tous les fichiers sont similaires, il n'y a que la date qui change.

Ensuite, tous les autres types de logs tels que
/var/log/syslog
,
/var/log/auth.log
,
/var/ossec/logs/alerts/alerts.log 
etc. ne doivent pas matcher.
0
blux Messages postés 26075 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 mai 2024 3 291
17 févr. 2022 à 17:30
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 ?
0
Salut,

A vrai dire, je ne suis pas un pro en regex donc je n'ai pas pu tenter grand chose. tu veux dire,
"^/var/log/sites-web/.*\.log"
?

Pour les guillemets, oui pas de problème.
0
blux Messages postés 26075 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 mai 2024 3 291
Modifié le 17 févr. 2022 à 17:53
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 :

[LOCATION] =~ s/^\s+|\s+$//g;


Pour forcer du pattern matching, ajoute 'm' devant ton guillemet ouvrant :

[LOCATION] !~ m"/var/log/sites-web/.*\.log"



0
Je tiens à préciser quelque chose, dans l'autre sens, cela fonctionne :

if [location] =~ "/var/log/sites-web/.*\.log" {

...

}


J'obtiens bien les données concernées.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
blux Messages postés 26075 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 mai 2024 3 291
17 févr. 2022 à 17:59
Tu ne serais pas dans ce cas-là, par hasard ?

https://forums.commentcamarche.net/forum/affich-16025052-shell-condition
0
Non, cela aurait pu, j'ai eu un doute ! Cependant je veux bien que le cas
[agent][name] != "host" 
et que le cas
 [location] !~ "/var/log/sites-web/.*\.log"
soit vrai pour valider la condition.

Merci pour ton aide !
0
Whismeril Messages postés 19045 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 21 mai 2024 912
17 févr. 2022 à 19:40
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
^\/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
0
Super ! C'est tout à fait adapté à mon cas. Je ne comprends pas tout ce que tu as utilisé, mais je vais regarder par moi-même et étudier cela. Merci !
0
Whismeril Messages postés 19045 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 21 mai 2024 912
Modifié le 18 févr. 2022 à 23:39
^
ç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

\d
repré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
0
Super, merci beaucoup pour tes explications !

Bon week-end
0
Whismeril Messages postés 19045 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 21 mai 2024 912 > Lynow
19 févr. 2022 à 11:02
De rien.

Merci de marquer le sujet résolu si ça te convient.
0