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/