J'ai configuré la journalisation haproxy via rsyslogd en utilisant les conseils de cet article , et tout semble bien fonctionner. Les fichiers journaux reçoivent les messages du journal.
Cependant, chaque message de journal de haproxy apparaît également à /var/log/syslog
. Cela signifie qu'une fois le serveur mis en ligne, le syslog sera tout à fait inutile, car il sera écrasé avec des messages de journal haproxy.
Je voudrais filtrer ces messages de /var/log/syslog
. Après avoir parcouru la documentation de rsyslogd, j'ai essayé de changer le fichier /etc/rsyslog.d/50-default.conf
Donc:
*.*;auth,authpriv.none;haproxy.none -/var/log/syslog
J'ai simplement ajouté le ;haproxy.none
partie. Après avoir redémarré rsyslogd, il a cessé de fonctionner complètement jusqu'à ce que je revienne sur mes modifications.
Qu'est-ce que je fais mal?
Vous pouvez également effectuer les opérations suivantes pour éviter qu'elles ne soient enregistrées dans d'autres journaux:
local0.* -/var/log/haproxy.log
& ~
Le & ~
signifie de ne pas mettre ce qui correspond dans la ligne ci-dessus ailleurs pour le reste des règles.
L'utilisation de & ~
a été déconseillé dans la version 7 de rsyslogd, et vous êtes encouragé à utiliser & stop
au lieu. Vous pouvez en savoir plus à ce sujet dans cette section de la page de compatibilité v7 .
les actions omruleset et discard (~) sont déconseillées
Les deux continuent de fonctionner, mais ont été remplacés par de meilleures alternatives.
L'action de suppression (caractère tilde) a été remplacée par la directive RainerScript "stop". Il est considéré comme plus intuitif et offre des performances légèrement meilleures.
Le module omruleset a été remplacé par la directive RainerScript "call". L'appel permet d'exécuter un ensemble de règles comme un sous-programme, et le fait avec des performances beaucoup plus élevées que l'ensemble omruleset. Notez que l'omruleset peut être exécuté à partir d'une file d'attente asynchrone. C'était plus un effet qu'un effet souhaité et n'est pas pris en charge par l'instruction call. Si cet effet était nécessaire, il peut simplement être simulé en exécutant les actions des ensembles de règles appelées de manière asynchrone (ce qui est en tout cas la bonne façon de gérer cela).
Notez que les modules obsolètes émettent des messages d'avertissement lorsqu'ils sont utilisés. Ils indiquent que la construction est obsolète et quelle instruction doit être utilisée en remplacement. Cela n'affecte pas les opérations: les deux modules sont toujours pleinement opérationnels et ne seront pas supprimés dans le délai v7.
Donc pour HAProxy quelque chose comme ça à la place:
$ more /etc/rsyslog.d/haproxy.conf
local2.* /var/log/haproxy.log
& stop
Quant à son fonctionnement, le & stop
indique à rsyslogd de supprimer tout message supplémentaire qui correspondait aux règles précédemment mises en correspondance jusqu'à ce point. Pour garantir que cette règle est détectée très tôt, vous pouvez modifier le nom du fichier de /etc/rsyslog.d/haproxy.conf
à /etc/rsyslog.d/00-haproxy.conf
.
Ok, je l'ai compris. C'est ce que mon /etc/rsyslog.d/20-haproxy.conf
ressemble à:
$ModLoad imudp
$UDPServerRun 514
local0.* -/var/log/haproxy_0.log
local1.* -/var/log/haproxy_1.log
J'ai changé de ligne dans 50-default.conf
à:
*.*;auth,authpriv,local0,local1.none -/var/log/syslog
Et maintenant, il semble faire ce que je veux.
Il existe une meilleure solution pour la journalisation haproxy.
/dev/log
Selon le manuel officiel, rsyslog doit être configuré pour écouter la prise réseau:
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
Mais vous ne pouvez utiliser que des sockets rsyslog pour cela:
rsyslog.d/haproxy.conf:
# HAproxy local socket
$AddUnixListenSocket /var/lib/haproxy/dev/log
:programname, contains, "haproxy" /var/log/haproxy.log
& stop
haproxy.cfg:
global
log /dev/log daemon
chroot /var/lib/haproxy
.......
Je préfère ne pas jouer avec la commande du fichier, donc à la place, j'ajoute un local0.none à l'entrée de ligne .. La configuration ressemble à:
*.info;mail.none;authpriv.none;cron.none;local2.none /var/log/messages
local2.* /var/log/haproxy.log
(Testé sur CentOS 7)
J'espère que cela pourra aider!