Rsyslog: discard ne fonctionne pas
Pour rediriger certains messages uniquement dans un fichier avec rsyslog, il est possible avec plusieurs règles d’utiliser l’opérateur ~ comme “action” pour supprimer les messages après écriture dans un fichier.
Par exemple, pour récupérer les messages contenant “iptables: ” uniquement dans le fichier /var/log/iptables, les règles suivantes semblent valides:
:msg, contains, "iptables: " -/var/log/iptables :msg, contains, "iptables: " ~
- 1ère ligne: En se basant sur le contenu du message (msg), s’il contient (contains) la chaîne de caractère “iptables: ” alors écrire dans le fichier /var/log/iptables sans bufferiser (-)
- 2ème ligne: avec les mêmes critères que précédemment, supprimer le message. (~)
Or, sur une Debian Squeeze (rsyslog 4.6.4-2) avec une configuration rsyslog basique, les messages ne sont pas supprimés, et se retrouvent dans /var/log/messages et dans la console.
Le souci ? Un bug dans rsyslog, corrigé dans la version 5.7.8 et backporté dans la branche stable à partir de la version 5.6.5