Notification par mail d'alertes kern.log

Résolu
Fred -  
Exileur Messages postés 1621 Date d'inscription   Statut Membre Dernière intervention   -
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

6 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    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
    2
    1. Exileur Messages postés 1621 Date d'inscription   Statut Membre Dernière intervention   150
       
      Method 3:

      Configurer un béte match de contenu dans rsyslog :
      :msg, regex, "Under-voltage detected!" ^/usr/local/bin/hi.bash


      Method 4 :

      Configuration du rsyslog pour executer un script sur un match de log ( via le module omprog ) :
      https://www.rsyslog.com/doc/v8-stable/configuration/modules/omprog.html

      module(load="omprog")
      action(type="omprog"
      binary="/pathto/omprog.py --parm1=\"value 1\" --parm2=\"value2\"
      template="RSYSLOG_TraditionalFileFormat")
      0
    2. Fred
       
      Merci à tous les deux de votre aide !
      Je vais tester...

      Fred
      0
    3. Exileur Messages postés 1621 Date d'inscription   Statut Membre Dernière intervention   150
       
      Hesites pas à revenir vers nous si tu rencontres des problémes lors de la mise en place de l'une des solutions proposées :)
      0
    4. Fred
       
      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
      0
  2. Fred
     
    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
    0
  3. Exileur Messages postés 1621 Date d'inscription   Statut Membre Dernière intervention   150
     
    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
    0
    1. Exileur Messages postés 1621 Date d'inscription   Statut Membre Dernière intervention   150
       
      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)
      0
  4. Fred
     
    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
    0
    1. Exileur Messages postés 1621 Date d'inscription   Statut Membre Dernière intervention   150
       
      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.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Fred
     
    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
    0
  7. Fred
     
    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
    0
    1. Exileur Messages postés 1621 Date d'inscription   Statut Membre Dernière intervention   150
       
      Super :)

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

      A bientot !
      0