Bonsoir David, bonsoir tout le monde,

Le 2025-01-02 09:09, David BERCOT a écrit :

Ainsi, la forme de règle qu'on retrouve habituellement est la suivante : ^\w{3} [ :[:digit:]]{11} [-._[:alnum:]]+ systemd\[1\]: Started [-/:. [:alnum:]]+$
Et cela fonctionne bien pour, par exemple :
Jan  1 19:12:38 debian systemd[1]...
Maintenant, j'ai constaté que, selon les fichiers de logs, j'avais aussi :
Jan.  1
Janv. 1
Dec 31
Dec. 31
Déc 31

Je décompose tes exemples ainsi :

        * La ligne commence par le mois, indiqué sur 3 à 4 caractères
        * Suivi d'un point optionnel
        * Suivi de un espace
* Suivi du jour du mois, calé ou non sur 2 caractères (et de l'heure), ce qui donne une suite de 10 à 11 chiffres, espaces et deux-points
        * Etc.

Si tu as bien ces variations, la bonne expression rationnelle est :

^\w{3,4}\.? [ :[:digit:]]{10,11} [-._[:alnum:]]+ systemd\[[[:digit:]]+\]: .*$

Si on décompose :

* ^\w{3,4} : La ligne commence par le mois, indiqué sur 3 à 4 caractères
        * \.? : Suivi d'un point optionnel
        *   : Suivi de un espace
* [ :[:digit:]]{10,11} : Suivi du jour du mois, calé ou non sur 2 caractères (et de l'heure), ce qui donne une suite de 10 à 11 chiffres, espaces et deux-points
        * Etc.

Tu noteras que j'ai opté pour l'expression :

systemd\[[[:digit:]]+\]:

Et non :

systemd\[1\]:

Car le PID du processus systemd n'est pas toujours 1. En fait, il y a plusieurs processus systemd. Voici ce que j'ai sur mon serveur :

$ ps axf | grep '/systemd ' | grep -v grep
1 ? Ss 1:36 /usr/lib/systemd/systemd --system --deserialize=116
4059223 ?        Ss     0:00 /usr/lib/systemd/systemd --user

Maintenant un exemple sur pièce :

Je crée le fichier de log avec les messages que je veux capturer :

$ cat > /tmp/log <<EOF
Jan. 1 22:08:01 debian systemd[1]: Starting user@0.service - User Manager for UID 0... Janv. 1 22:08:01 debian systemd[4059223]: Queued start job for default target default.target. Dec 31 22:08:01 debian systemd[4059223]: Created slice app.slice - User Application Slice. Dec. 31 22:08:01 debian systemd[4059223]: Reached target paths.target - Paths. Déc 31 22:08:01 debian systemd[1]: Starting user@0.service - User Manager for UID 0...
EOF

Puis je crée le fichier de règles :

$ cat > /tmp/rules <<EOF
^\w{3,4}\.? [ :[:digit:]]{10,11} [-._[:alnum:]]+ systemd\[[[:digit:]]+\]: .*$
EOF

Puis je vérifie quels messages sont capturés par mes (enfin, ici, ma) règles :

$ logcheck-test -l /tmp/log -r /tmp/rules
Jan. 1 22:08:01 debian systemd[1]: Starting user@0.service - User Manager for UID 0... Janv. 1 22:08:01 debian systemd[4059223]: Queued start job for default target default.target. Dec 31 22:08:01 debian systemd[4059223]: Created slice app.slice - User Application Slice. Dec. 31 22:08:01 debian systemd[4059223]: Reached target paths.target - Paths. Déc 31 22:08:01 debian systemd[1]: Starting user@0.service - User Manager for UID 0...
================================================================================
parsed file: /tmp/log
used rule file: /tmp/rules

Les 5 lignes sont bien capturées, ma règle fonctionne.

A++, Sébastien

--
Sébastien Dinot
Ne goutez pas au logiciel libre, vous ne pourriez plus vous en passer !
https://www.palabritudes.net/

Répondre à