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