Menu

Notification par mail d'alertes kern.log [Résolu]

-
Bonjour,

Je cherche un moyen de recevoir une notification par mail lorsque la ligne :
Under-voltage detected! (0x00050005) s'affiche dans mon kern.log

Est-ce qu'une ligne de commande avec une tache cron pourrait convenir ?
Un grep ou sed pourrait peut-être faire l'affaire mais il ne faudrait pas renvoyer de messages pour d'anciennes alertes...
Une idée ?
Merci
Fred

Configuration: Windows / Firefox 67.0
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
28884
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 juillet 2019
6600
2
Merci
Bonjour,

Méthode 1:

La commande
tail -f /var/log/kern.log
affiche en temps réel l'évolution de ce fichier. Il est possible ensuite de filtrer le tout avec
grep
, et déclencher si ce grep est vérifié la commande ou le script adéquat (e.g. la commande
mail
).

tail -f /var/log/kern.log | (grep -qv -- "Under-voltage detected!" || mail ...)


... en remplaçant "..." par les paramètres adéquats.

Méthode 2:

Tu peux repartir de
fail2ban
, c'est un outil qui traite en live des fichiers de logs et qui permet, en fonction d'un motif donné (typiquement une expression régulière, comme pour
grep
), de déclencher une action (par exemple un appel à la commande
mail
).

Voir par exemple ce tutoriel.

Bonne chance

Dire « Merci » 2

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 54757 internautes nous ont dit merci ce mois-ci

Exileur
Messages postés
1404
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 juillet 2019
67 -
Hesites pas à revenir vers nous si tu rencontres des problémes lors de la mise en place de l'une des solutions proposées :)
Des 4 méthodes, celle qui me semblait plus adaptée à mes connaissances était celle avec fail2ban mais je ne dois pas faire ce qu'il faut ;(
J'ai créé ce filtre :
[Definition]
#failregex = Under-voltage detected!
failregex = Out of memory
ignoreregex =

Je le teste via :
fail2ban-regex /var/log/kern.log /etc/fail2ban/filter.d/fredkern.conf
mais cela ne fonctionne pas ;(

Running tests
=============
Use failregex filter file : fredkern, basedir: /etc/fail2ban
ERROR: No failure-id group in


Le failregex ne doit pas avoir la bonne syntaxe...
Fred
Exileur
Messages postés
1404
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 juillet 2019
67 -
essaie avec un
failregex = .*Out of memory.*

Si ça fonctionne pas faudra voir avec mamiemando :):) Je suis pas callé fail2ban du tout
Marche pas mieux Exileur, même erreur ;(
ERROR: No failure-id group in '.*Out of memory.*'

Fred
mamiemando
Messages postés
28884
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 juillet 2019
6600 -
Bonjour

Pour ton erreur, voir ce lien, ton filtre semble mal défini. Il semblerait que tu aies mis ton expression rationnelle à l'endroit où tu dois écrire
/var/log/kernel.log
.

Ce que je te conseille, c'est de te baser sur les jails existantes pour construire la tienne. Les chemins vers les fichiers de logs sont définis dans
/etc/fail2ban.paths-arch.conf
et sont des chemins absolus. Ces valeurs sont ensuite réutilisées dans
/etc/fail2ban/jail.conf
et
/etc/fail2ban/jail.local
(pour rappel, tu n'es pas sensé modifier
/etc/fail2ban/jail.conf
, mais le copier dans
/etc/fail2ban/jail.local
puis modifier ce fichier pour configurer tes jails). Je te recommande de lire ce tutoriel sur fail2ban histoire de bien en comprendre le fonctionnement.

Par ailleurs, garde en tête que
fail2ban
n'est pas nécessaire pour atteindre ton objectif, c'est faisable sans (cf méthode 2). L'intérêt principal de
fail2ban
réside dans son élégance car il est lancé au démarrage, démonisé, et facilement administrable. La principale difficulté, quelle que soit la méthode retenue, réside dans trouver la bonne expression régulière et la bonne commande
mail
.

Bonne chance
Commenter la réponse de mamiemando
0
Merci
Merci Mamiemando mais je n'arrive à rien.

Méthode 2 :
Avec fail2ban, la failregex suivante :
failregex= Under-voltage detected
renvoie une erreur :
ERROR: No failure-id group in 'Under-voltage detected'

Si je rajoute le champ <HOST> :
failregex= Under-voltage detected <HOST>
Plus d'erreur mais rien de matché puisque pas de <HOST>
Lines: 676 lines, 0 ignored, 0 matched, 676 missed

Méthode 1 :
tail -f /var/log/kern.log | (grep -qv -- "Under-voltage detected!" || mail ...)
ne renvoyait rien
Avec :
grep "Under-voltage" /var/log/kern.log | mail -s "Problème voltage Pi" monmail@domain
je m'en sors mais je ne reçois pas l'alerte au bon moment, uniquement quand la commande est lancée et si je peux recevoir plusieurs messages pour des mêmes alertes si le log n'a pas tourné...

C'est la galère ;(

Fred
Commenter la réponse de Fred
Messages postés
1404
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 juillet 2019
67
0
Merci
Vous vous prenez vraiment la tête x)

De mon point de vu, le meilleur moyen de catcher des logs c'est de passer par l'outil de log ....

cat <<-'EOF' > /etc/rsyslog.d/40-voltage.conf
:msg, regex, "Under-voltage detected!" ^/usr/local/bin/sendmail.bash
EOF

cat <<-'EOF' > /usr/local/bin/sendmail.bash
#ton code
#
#

#Code de test
date >> /tmp/tests
EOF

chmod +x /usr/local/bin/sendmail.bash

systemctl restart rsyslog.service
echo 'Under-voltage detected!' > /dev/kmsg
sleep 1
echo 'Under-voltage detected!' > /dev/kmsg

cat /tmp/tests
jeudi 11 juillet 2019, 09:05:27 (UTC+0200)
jeudi 11 juillet 2019, 09:05:28 (UTC+0200)

tail -n 2 /var/log/kern.log
Jul 11 09:05:27 po-rez kernel: [174105.023083] Under-voltage detected!
Jul 11 09:05:28 po-rez kernel: [174106.026172] Under-voltage detected!



Aller, des bisous
N'oubliez pas de marquez votre post comme résolut lorsque vous avez eu les réponses à vos questions...
Au royaume des aveugles, les borgnes sont rois.
Exileur
Messages postés
1404
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 juillet 2019
67 -
Il faudra surement revoir la regex pour matcher la ligne compléte.
Ou utiliser plutot un 'contains' ou un 'startswith' a la place de 'regex' tel que :

cat <<-'EOF' > /etc/rsyslog.d/40-voltage.conf
:msg, contains, "Under-voltage detected!" ^/usr/local/bin/sendmail.bash
EOF

cat <<-'EOF' > /usr/local/bin/sendmail.bash
#ton code
#
#

#Code de test
date >> /tmp/tests
EOF

chmod +x /usr/local/bin/sendmail.bash

systemctl restart rsyslog.service
echo 'Under-voltage detected!' > /dev/kmsg
sleep 1
echo 'asdadasd Under-voltage detected!' > /dev/kmsg
sleep 1
echo 'Under-voltage detected! asdasdada' > /dev/kmsg
sleep 1
echo 'adasasdasd Under-voltage detected! asdasdada' > /dev/kmsg


Ce qui nous donne :
cat /tmp/tests 
jeudi 11 juillet 2019, 14:18:21 (UTC+0200)
jeudi 11 juillet 2019, 14:18:22 (UTC+0200)
jeudi 11 juillet 2019, 14:18:23 (UTC+0200)
jeudi 11 juillet 2019, 14:18:25 (UTC+0200)
Commenter la réponse de Exileur
0
Merci
Merci Exileur.
Il doit y avoir un pb car le fichier test est vide :
cat: /tmp/tests: Aucun fichier ou dossier de ce type

J'ai mis ceci dans sendmail.bash
#mon code
(echo "Subject: Alerte sous voltage Pi"; echo "date") | sendmail ***@***
#Code de test
date >> /tmp/tests

Peut-être un pb avec rsyslog ?
 systemd[1]: Starting System Logging Service...
systemd[1]: Started System Logging Service.
rsyslogd[17960]: imuxsock: Acquired UNIX socket '/run/systemd/journal/syslog' (fd 3) from systemd. [v8.1901.0]
rsyslogd[17960]: [origin software="rsyslogd" swVersion="8.1901.0" x-pid="17960" x-info="https://www.rsyslog.com"] start


Fred
Exileur
Messages postés
1404
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 juillet 2019
67 -
Hello,

Tu peux tester la conf avec :
sudo rsyslogd -N1

Quel code as tu utilise?
cat /etc/rsyslog.d/40-voltage.conf


Le fichier sendmail.bash est il executable?
/usr/local/bin/sendmail.bash
le code genere-t-il, de base le fichier.

Alternativement a

echo 'Under-voltage detected! asdasdada' > /dev/kmsg

Tu peux utiliser la commande
logger - t kernel Under-voltage detected! asdasdada
pour faire des tests et generer du log.
Commenter la réponse de Fred
0
Merci
Alors voilà :
rsyslogd -N1
rsyslogd: version 8.1901.0, config validation run (level 1), master config /etc/rsyslog.conf
rsyslogd: End of config validation run. Bye.

/etc/rsyslog.d/40-voltage.conf
:msg, contains, "Under-voltage detected!" ^/usr/local/bin/sendmail.bash

Le fichier sendmail.bash est bien exécutable (chmod +x)
Rien n'a été modifié dans mon /dev/kmsg depuis le 8/07 alors qu'il y a bien d'autres enregistrements dans le log kern.log !

Fred
Commenter la réponse de Fred
0
Merci
Tout fonctionne parfaitement !
Mille mercis...
Je remets la solution qui va bien ;)

Fred
cat <<-'EOF' > /etc/rsyslog.d/40-voltage.conf
:msg, regex, "Under-voltage detected!" ^/usr/local/bin/sendmail.bash
EOF

cat <<-'EOF' > /usr/local/bin/sendmail.bash
#!/bin/bash
DATE=`date "+%d.%m.%Y - %Hh%Mm"`
echo "Le $DATE : alerte de sous voltage sur $HOSTNAME " | mail -s "Alerte sous voltage sur $HOSTNAME" ***@***
EOF

#Code de test
date >> /tmp/tests
EOF

chmod +x /usr/local/bin/sendmail.bash

systemctl restart rsyslog.service
Exileur
Messages postés
1404
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 juillet 2019
67 -
Super :)

Hesite pas à passer ton sujet en résolu si c'est le cas !

A bientot !
Commenter la réponse de Fred