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-dessusconnection 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)