Je « viens dinstaller haproxy sur mon serveur de test.

Existe-t-il un moyen de lui faire écrire ses journaux dans un fichier local, plutôt que dans syslog?

Ceci est uniquement à des fins de test, donc je ne veux pas commencer à ouvrir ports / encombrer syslog avec toutes mes données de test.

Malheureusement, la seule information que je peux trouver concerne la connexion à un serveur syslog.

Jai essayé dutiliser:

log /home/user/ha.log local0 

dans ma configuration. Mais cela ma dit:

[ALERT] 039/095022 (9528) : sendto logger #1 failed: No such file or directory (errno=2) 

Quand jai redémarré. Jai donc créé le fichier avec touch /home/user/ha.log et redémarré à quel point jai obtenu:

[ALERT] 039/095055 (9593) : sendto logger #1 failed: Connection refused (errno=111) 

Est-ce possible, ou vais-je devoir configurer syslog etc. pour voir mes données de test?

Commentaires

  • I don ‘ Je pense que HAProxy peut se connecter à un fichier, et je soupçonne que la raison en est que les écritures sur le disque sont une opération bloquante. Pourquoi ne voulez-vous vraiment pas utiliser syslog? La configuration nest pas si compliquée. Vous pouvez attribuer une fonction locale à HAProxy et configurer votre démon syslog pour écrire ces entrées dans un fichier différent, et non dans d’autres fichiers syslog (ou flux réseau), si vous ‘ n’êtes pas souhaitant que les journaux HAProxy ne soient pas mélangés avec tout le reste.

Réponse

Haproxy ne prend tout simplement pas en charge comme indiqué dans la documentation ( https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#3.1-log ), linstruction « log » prend comme premier paramètre un adresse. Si ce « fichier sa » est un socket unix et HAProxy parlera au format syslog sur ce socket. Haproxy est conçu comme ceci car sa responsabilité est de faire les requêtes proxy, pas décrire des fichiers, il délègue lécriture des fichiers journaux à syslog . Si vous ne voulez pas jouer avec votre machine, vous pouvez par exemple installer logstash et exécuter: logstash -e "input { unix { path => "/tmp/haprxoy_log.sock" } } output { stdout { } }" et ajouter: log /tmp/haprxoy_log.sock Dans votre haproxy.cfg pour le tester.

Commentaires

  • Je ‘ m obtiens  » E: Impossible de localiser le fichier journal du package « . Logstash a-t-il été supprimé dubuntu?
  • @ user568021 semble que logstash nest pas fourni dans ubuntu, mais Elastic (le mainteneur de logstash ‘) fournit une source apt. De plus, logstash est un logiciel java, vous pourrez donc peut-être lexécuter en téléchargeant un fichier jar en lexécutant avec un JRE (fourni par ubuntu)

Réponse

Vous pouvez modifier le fichier de configuration du journal haproxy sous /etc/rsyslog.d/ pour pointer le fichier vers le chemin que vous aimez. Je ne suis pas sûr dune autre distribution. Pour moi, jutilise Debian. Jai changé /etc/rsyslog.d/49-haproxy.conf pour quil pointe vers /var/log/haproxy/haproxy.log,

# Create an additional socket in haproxy"s chroot in order to allow logging via # /dev/log to chroot"ed HAProxy processes $AddUnixListenSocket /var/lib/haproxy/dev/log # Send HAProxy messages to a dedicated logfile if $programname startswith "haproxy" then /var/log/haproxy/haproxy.log &~ 

Vous devez également mettre à jour le chemin du journal dans /etc/logrotate.d/haproxy vers le nouveau chemin. Pour quil pivote et compresse le fichier journal dans le chemin nouvellement configuré en utilisant gzip.

Ensuite, redémarrez rsyslog.service.

sudo systemctl restart rsyslog.service 

Maintenant haproxy.log.* sera dans le répertoire /var/log/haproxy/.

Commentaires

  • Comment créer des consigner les erreurs telles que /var/log/haproxy-errors.log sans affecter le haproxy.log dorigine?

Answer

Depuis la version 1.9 HAProxy prend en charge la journalisation vers stdout et stderr.

Dans cet esprit, il est assez simple de le diriger vers un fichier.

# change haproxy.cfg file with the following global log stdout local0 debug defaults log global option httplog 

Et puis vous pouvez simplement lancer HAProxy comme ceci:

haproxy -f haproxy.cfg > haproxy.log 2>&1 & 

Comme vous le savez probablement > pipes stdout dans le fichier haproxy.log puis 2>&1 pipes stderr également dans le même fichier. Il se termine par & qui mettra le processus en arrière-plan.

Vous pouvez devenir plus sophistiqué et essayer de configurer un script pour tuer linstance précédente de haproxy en faisant quelque chose comme ceci:

#!/bin/bash # mini launcher kill -9 `cat /home/user/haproxy.pid` /home/user/haproxy -f /home/haproxy.cfg > /home/user/haproxy.log 2>&1 & echo $! > /home/user/haproxy.pid 

Dur, comme vous pouvez probablement le dire … non recommandé.

Modifier: la journalisation dans des fichiers était autrefois un événement bloquant et donc pas recommandé, spécialement pour quelque chose comme HAProxy. Léquipe HAProxy a clairement indiqué dans le message de publication ci-dessus que ce nest plus le cas .

Nous avons reçu cette demande assez souvent et avons passé du temps à planifier la meilleure façon de limplémenter, sans la bloquer, et nous sommes heureux dannoncer que nous trouvé une solution!

Commentaires

  • pourquoi se connecte à stdout / err  » non recommandé « ? est-ce votre opinion ou y a-t-il une documentation officielle sur les problèmes avec ça?
  • @Florian, vous avez raison. Jai été égaré par le comportement passé. Il ne bloque pas sur les versions récentes donc la phrase était opinion (et erronée). Modifié la réponse. Merci!

Réponse

Vous avez essayé de configurer dans le répertoire personnel de lutilisateur, haproxy na pas la permission pour accéder au répertoire personnel de lutilisateur, ce qui cause un problème.

À la place, essayez dans un autre emplacement, créez un répertoire dans /var/<directory>

log /var/<directory>/ha.log 

Commentaires

  • Jai essayé sudo touch /var/log/ha.log et ajouté log /var/log/ha.log local0 à ma configuration, mais jai eu la même erreur que ci-dessus connection refused.
  • Dans le journal, pourquoi vous donnez local0 à la fin?
  • Jai essayé de le laisser de côté, mais quand jai redémarré, jai eu lerreur 'log' expects <address> and <facility> as arguments., donc javais besoin de quelque chose. Selon les instructions <facility> must be one of the 24 standard syslog facilities (qui, je pense, peuvent faire partie du problème)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *