3 votes

Comment gérer les messages de mon application personnalisée dans rsyslog ?

J'ai une application Ruby sur mon serveur, appelons-la "alpha". L'application émet des messages syslog avec le nom de programme "alpha". Je veux séparer mes messages de log dans des fichiers distincts en fonction du type de message, par exemple les messages "auth" (connexions) ou les avertissements concernant les ressources du système.

Je n'ai aucun moyen de spécifier le "type de message" à syslog autre que le nom de mon programme, donc j'ajoute simplement "AUTH :", "SYSTEM :" etc. au début de mon message.

En utilisant Google et les pages de manuel, j'ai trouvé les conditions suivantes :

:programname,isequal,"alpha"           /var/log/alpha.log

Cela permet d'enregistrer tous les messages de l'application "alpha" dans le bon fichier journal.

:msg,startswith," AUTH:"                /var/log/alpha-auth.log

Cela permet d'enregistrer tous les messages commençant par "AUTH :" dans le bon fichier journal.

Il est évident que la dernière condition ne s'applique pas seulement à "alpha", mais à tous les messages. J'aimerais combiner ces conditions en une seule qui dirait "tous les messages d'alpha qui commencent par AUTH : ...". Est-il possible de combiner des filtres avec des "et" comme cela ?

Les "blocs de type BSD" semblent parfaits, car je peux définir un bloc pour mon application et toutes les conditions ne s'appliquent qu'aux messages de cette application. Malheureusement, d'après la documentation, cette fonctionnalité n'est plus prise en charge (obsolète ?), et je ne veux pas dépendre d'une fonctionnalité obsolète. Est-ce que rsyslog v7+ introduit une alternative à ces blocs ?

En utilisant un filtre basé sur l'expression, j'ai réussi à obtenir le résultat souhaité, mais j'ai l'impression d'utiliser un bazooka pour tuer une mouche :

if $programname == "alpha" and $msg startswith " AUTH:" then \
    /var/log/alpha-auth.log

Quelle serait la manière "correcte" (c'est-à-dire la plus simple et la moins sujette à erreur) de procéder ?


J'utilise Debian Jessie, ce qui signifie actuellement rsyslog 8.4.2.

6voto

Tout d'abord, créez un fichier de configuration dans /etc/rsyslog.d, tel que 01-alpha.conf La mise en place d'un système de gestion de l'information permet d'organiser les choses. De cette façon, votre 01-alpha.conf sera lu en premier avant le 50-default.conf. 50-default.conf a pour règle de tout enregistrer dans /var/log/syslog, donc dans cet exemple nous rejetterons le message après l'avoir écrit dans les logs d'alpha.

Dans 01-alpha.conf :

:programname, isequal, "alpha" {
  *.* /var/log/alpha.log
  :msg, startswith, "AUTH:" {
    *.* /var/log/alpha-auth.log
  }
  stop
}

Le message n'entre dans ce filtre que si le nom du programme est alpha, il sera alors enregistré dans /var/log/alpha.log. S'il s'agit d'un journal d'authentification, il est enregistré dans /var/log/alpha-auth.log. À la fin, le message est supprimé afin qu'il ne soit pas écrit ailleurs.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X