C'est toujours bien l'égo boost, surtout quand ça laisse des traces sur l'interweb.
Alex
Le 7 février 2017 à 12:53, Yannick Cadin yannick@diablotin.fr a écrit :
Bon comme je constate que mon problème n'émeut personne, j'apporte moi-même la réponse :
Il y avait 2 soucis combinés (sans rapport direct l'un avec l'autre).
En premier, c'est posix par défaut jusqu'à la version 3.5 incluse de syslog-ng, pcre par défaut à partir de la version 3.6.
Ensuite et surtout, le motif (en premier paramètre de subst) doit impérativement être délimité par des apostrophes sans quoi les \ ne serviront qu'à banaliser le caractère qui les suit immédiatement et ne seront pas interprétés comme faisant partie de symboles PCRE.
OU ALORS, si l'on veut délimiter le motif avec des guillemets il faut alors doubler chaque .
Exemple concret de ce que je voulais réaliser (et qui désormais fonctionne) :
rewrite remove_timestamp_in_docker_events { subst('(docker/\w+[\d+]:) \d{4}-\d\d-\d\d \d\d:\d\d:\d\d,\d+', "$1", value("MESSAGE") type("pcre")); };
S'il était avéré qu'une expression rationnelle POSIX soit plus rapide à traiter alors on peut opter pour l'une des variantes ci-dessous :
subst('(docker/[^[]+[[0-9]+]:) [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]+', "$1", value("MESSAGE") type("posix"));
subst('(docker/[[:alnum:]]+[[0-9]+]:) [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]+', "$1", value("MESSAGE") type("posix"));
Merci à moi (on n'est jamais aussi bien servi que par soi-même, surtout en guise d'auto-congratulations ;)
Yannick
Le 2017-02-06 22:12, Yannick Cadin a écrit :
Bonsoir,
On reste dans le traitement des logs.
J'appelle une commande subst dans un fichier syslog-ng.conf (sur Ubuntu 16.10 à jour)
Si le motif recherché est un littéral, ça marche très bien. Si le motif recherché est une expression rationnelle au format POSIX, ça marche très bien. Si le motif recherché contient ne serait-ce qu'un symbole PCRE (exemple \d ou \w) alors il N'y a PLUS AUCUNE correspondance trouvée.
Y compris si j'ajoute explicitement type("pcre"). Bien que ce soit théoriquement superflu puisque c'est le "moteur" d'expressions rationnelles que syslog-ng prétend employer par défaut.
J'ai, par acquis de conscience, lancer une commande ldd sur le binaire syslog-ng qui m'a bien confirmé que le programme était lié avec la librairie partagée libpcre.
Quasi impossible de trouver le moindre exemple d'emploi d'expressions PCRE dans une config syslog-ng (soit je cherche mal, soit personne n'emploie les expressions PCRE dans syslog-ng).
Auriez-vous une piste à me suggérer ? (Vous pouvez vous épargner la solution consistant à se contenter des expressions POSIX, c'est ce que j'adopterai en dernier recours.)
D'avance merci pour votre aide,
Yannick
Liste de diffusion du FRsAG http://www.frsag.org/
Liste de diffusion du FRsAG http://www.frsag.org/