Comment garder les messages du journal haproxy hors de / var / log / syslog

29

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 /var/log/syslog. Après avoir parcouru la documentation de rsyslogd, j'ai essayé de changer le fichier /etc/rsyslog.d/50-default.confainsi:

*.*;auth,authpriv.none;haproxy.none     -/var/log/syslog

J'ai simplement ajouté la ;haproxy.nonepartie. 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?

itsadok
la source

Réponses:

26

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 & ~moyen de ne pas mettre ce qui correspond dans la ligne ci-dessus ailleurs pour le reste des règles.

Kyle Brandt
la source
Merci. Cela semble plus logique que d'avoir à modifier la configuration principale.
itsadok
13
Il convient de noter que si vous procédez ainsi, votre ligne local0. * Doit être traitée avant la ligne " . " Dans /etc/rsyslog.d/50-default.conf. J'ai créé un fichier appelé /etc/rsyslog.d/haproxy.conf pour contenir ma configuration de journalisation spécifique au haproxy, mais il s'est connecté à syslog malgré un "& ~" à la fin. C'est parce que (bien sûr) 50-default.conf est chargé avant haproxy.conf donc le catchall " . " A été mis en correspondance avant ma ligne "local0. *". La solution était de renommer mon fichier spécifique à haproxy en /etc/rsyslog.d/49-haproxy.conf
Giles Thomas
1
Pour info une petite mise à jourrsyslogd-2307: warning: ~ action is deprecated, consider using the 'stop' statement instead [try http://www.rsyslog.com/e/2307 ]
KCD
Ceci décrit l'utilisation de & stopau lieu de & ~: rsyslog.com/doc/v8-stable/compatibility/v7compatibility.html .
slm
14

L'utilisation de a & ~été déconseillée dans la version 7 de rsyslogd, et vous êtes encouragé à l'utiliser à la & stopplace. 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 omrules. 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 à la façon dont cela fonctionne, le & stopdit à rsyslogd de rejeter 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 changer le nom du fichier de /etc/rsyslog.d/haproxy.confà /etc/rsyslog.d/00-haproxy.conf.

slm
la source
3

Ok, je l'ai compris. Voici à quoi je /etc/rsyslog.d/20-haproxy.confressemble:

$ModLoad imudp
$UDPServerRun 514

local0.* -/var/log/haproxy_0.log
local1.* -/var/log/haproxy_1.log

J'ai changé la ligne en 50-default.conf:

*.*;auth,authpriv,local0,local1.none     -/var/log/syslog

Et maintenant, il semble faire ce que je veux.

itsadok
la source
Il est généralement préférable de NE PAS modifier les fichiers de configuration créés par d'autres packages car cela crée des problèmes de mise à niveau / propriété. S'il s'agit d'un serveur de flocon de neige unique, très bien, mais pour les déploiements automatisés, la modification de 50-default.conf est généralement une "mauvaise chose".
Bruce Edge
2

Il existe une meilleure solution pour la journalisation haproxy.

  • HAproxy s'exécute dans chroot donc il ne peut pas accéder /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
          .......
user320813
la source
1

Je préfère ne pas jouer avec la commande du fichier, alors à la place, j'ajoute un local0.none au . 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 ça t'as aidé!

mgna20
la source