Bonjour,
Tout d'abord, meilleurs voeux à tous pour 2025 !
Ensuite, je m'arrache les cheveux depuis plusieurs jours avec
Logcheck.
J'essaye d'enlever un certain nombre de lignes qui ne m'intéressent
pas mais je n'arrive pas à trouver la bonne expression régulière.
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
J'ai donc tenté :
^\w{3}[.]?
où, sauf erreur de ma part, la partie [.]? signifie soit un ".", soit
rien du tout.
Et ça ne marche pas.
D'autre part, il faudrait en fait que ce soit une expression qui
intègre 3 ou 4 caractères suivis, éventuellement, d'un point.
Ensuite, je m'arrache les cheveux depuis plusieurs jours avec Logcheck. J'essaye d'enlever un certain nombre de lignes qui ne m'intéressent pas mais je n'arrive pas à trouver la bonne expression régulière.[...]
Est-ce que vous auriez une idée ?
On Thu, 2025-01-02 at 09:09 +0100, David BERCOT wrote:
Bonjour,
Tout d'abord, meilleurs voeux à tous pour 2025 !
Ensuite, je m'arrache les cheveux depuis plusieurs jours avec Logcheck.
J'essaye d'enlever un certain nombre de lignes qui ne m'intéressent
pas mais je n'arrive pas à trouver la bonne expression régulière.
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
J'ai donc tenté :
^\w{3}[.]?
où, sauf erreur de ma part, la partie [.]? signifie soit un ".", soit
rien du tout.
Et ça ne marche pas.
D'autre part, il faudrait en fait que ce soit une expression qui
intègre 3 ou 4 caractères suivis, éventuellement, d'un point.
Voir https://man7.org/linux/man-pages/man7/time.7.html <https:// man7.org/linux/man-pages/man7/time.7.html> et https://man7.org/linux/ man-pages/man5/locale.5.html <https://man7.org/linux/man-pages/man5/ locale.5.html>
Une solution pour le futur serait de configurer la langue du système en anglais POSIX (ou C) et de laisser les utilisateurs humains configurer
leur langue.
Alors tous les fichiers de log des démons ou serveurs mentionnerait Jan 1.
Car la date et l'heure sont formattés par la fonction https://man7.org/ linux/man-pages/man3/strftime.3.html <https://man7.org/linux/man-pages/ man3/strftime.3.html>
Pour les logiciels démons récalcitrants, je suggère de faire un rapport
de bogue et de proposer un patch.
Bonne année à tous.
--
Basile STARYNKEVITCH <basile@starynkevitch.net>
8 rue de la Faïencerie
92340 Bourg-la-Reine, France
http://starynkevitch.net/Basile & https://github.com/bstarynk
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
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
^\w{3,4}\.? [ :[:digit:]]{10,11} [-._[:alnum:]]+
systemd\[[[:digit:]]+\]: .*$
EOF
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 :Je décompose tes exemples ainsi :
^\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
* 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/ <https://www.palabritudes.net/>
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 546 |
Nodes: | 16 (1 / 15) |
Uptime: | 155:14:04 |
Calls: | 10,383 |
Files: | 14,054 |
Messages: | 6,417,848 |