web-dev-qa-db-fra.com

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

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.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?

30
itsadok

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.

28
Kyle Brandt

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.

14
slm

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.

3
itsadok

Il existe une meilleure solution pour la journalisation haproxy.

  • HAproxy s'exécute dans chroot, il ne peut donc 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
          .......
2
user320813

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!

1
mgna20