Ich habe gerade haproxy auf meinem installiert Testserver.
Gibt es eine Möglichkeit, seine Protokolle in eine lokale Datei anstatt in ein Syslog zu schreiben?
Dies dient nur zum Testen, sodass ich nicht mit dem Öffnen beginnen möchte Ports / Syslog mit all meinen Testdaten überladen.
Leider dreht sich die einzige Information, die ich finden kann, um die Protokollierung auf einem Syslog-Server.
Ich habe versucht, Folgendes zu verwenden:
log /home/user/ha.log local0
in meiner Konfiguration. Aber das sagte mir:
[ALERT] 039/095022 (9528) : sendto logger #1 failed: No such file or directory (errno=2)
Beim Neustart. Also habe ich die Datei mit touch /home/user/ha.log
erstellt und an dem Punkt neu gestartet, an dem ich Folgendes erhalten habe:
[ALERT] 039/095055 (9593) : sendto logger #1 failed: Connection refused (errno=111)
Ist dies möglich oder Muss ich Syslog usw. konfigurieren, um meine Testdaten anzuzeigen?
Kommentare
- Ich habe ‚
wirklich kein Syslog verwenden? Config ist gar nicht so schwierig. Sie können HAProxy eine lokale Einrichtung zuweisen und Ihren Syslog-Daemon so konfigurieren, dass diese Einträge in eine andere Datei und nicht in andere Syslog-Dateien (oder Netzwerk-Streams) geschrieben werden, wenn Sie ‚ dies nicht tun Die HAProxy-Protokolle sollen nicht mit allem anderen gemischt werden.
Antwort
Haproxy wird einfach nicht unterstützt Protokollierung in Dateien. Wie in der Dokumentation angegeben ( https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#3.1-log ), verwendet die Anweisung „log“ als ersten Parameter an Wenn diese „sa-Datei“ ein Unix-Socket ist und HAProxy im Syslog-Format mit diesem Socket spricht. Haproxy ist so konzipiert, da es für Proxy-Anforderungen und nicht für das Schreiben von Dateien verantwortlich ist und das Schreiben von Protokolldateien an Syslog delegiert Wenn Sie sich nicht mit Ihrem Computer anlegen möchten, können Sie beispielsweise logstash installieren und Folgendes ausführen: logstash -e "input { unix { path => "/tmp/haprxoy_log.sock" } } output { stdout { } }"
und hinzufügen: log /tmp/haprxoy_log.sock
In Ihre haproxy.cfg, um es zu testen.
Kommentare
- Ich ‚ erhalte “ E: Paketprotokoll nicht gefunden „. Wurde logstash aus ubuntu entfernt?
- @ user568021 scheint, dass logstash nicht in ubuntu bereitgestellt wird, aber elastisch (logstash ‚ s Betreuer) bietet eine passende Quelle. Außerdem ist logstash eine Java-Software, sodass Sie sie möglicherweise ausführen können, indem Sie eine JAR-Datei herunterladen, in der sie mit einer JRE (die von Ubuntu bereitgestellt wird) ausgeführt wird.
Answer
Sie können die Haproxy-Protokollkonfigurationsdatei unter /etc/rsyslog.d/
ändern, um die Datei auf den gewünschten Pfad zu verweisen. Ich bin mir bei anderen Distributionen nicht sicher. Für mich verwende ich Debian. Ich habe /etc/rsyslog.d/49-haproxy.conf
geändert, um auf /var/log/haproxy/haproxy.log
,
Sie sollten auch den Protokollpfad in /etc/logrotate.d/haproxy
auf den neuen Pfad aktualisieren, damit die Protokolldatei im neu konfigurierten Pfad mit gzip
.
Starten Sie dann rsyslog.service neu.
sudo systemctl restart rsyslog.service
Jetzt haproxy.log.*
befindet sich im Verzeichnis /var/log/haproxy/
.
Kommentare
- Wie erstelle ich eine separate Datei? Protokoll für Fehler wie /var/log/haproxy-errors.log ohne Auswirkungen auf das ursprüngliche haproxy.log?
Antwort
Seit Version 1.9 unterstützt HAProxy die Protokollierung bei stdout
und stderr
.
In diesem Sinne ist es ziemlich trivial, es an eine Datei weiterzuleiten.
# change haproxy.cfg file with the following global log stdout local0 debug defaults log global option httplog
Und dann können Sie HAProxy einfach so ausführen:
haproxy -f haproxy.cfg > haproxy.log 2>&1 &
Wie Sie wahrscheinlich wissen, >
pipes stdout
in die Datei haproxy.log
und dann 2>&1
Pipes stderr
auch in dieselbe Datei. Es endet mit &
, wodurch der Prozess in den Hintergrund gerückt wird.
Sie können schicker werden und versuchen, ein Skript einzurichten, um die vorherige Instanz von haproxy
, indem Sie Folgendes tun:
#!/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
Schwierig, wie Sie wahrscheinlich erkennen können … nicht empfohlen.
Bearbeiten: Die Protokollierung in Dateien war früher ein blockierendes Ereignis und daher nicht empfohlen, speziell für so etwas wie HAProxy. Das HAProxy-Team hat in dem oben verlinkten Veröffentlichungsbeitrag deutlich gemacht, dass dies nicht mehr der Fall ist .
Wir haben diese Anfrage ziemlich oft erhalten und einige Zeit damit verbracht, den besten Weg zu planen, sie zu implementieren – ohne zu blockieren – und wir freuen uns, Ihnen mitteilen zu können, dass wir dies getan haben eine Lösung gefunden!
Kommentare
- Warum wird bei stdout / err protokolliert? “ nicht empfohlen „? Ist dies Ihre Meinung oder gibt es eine offizielle Dokumentation zu Problemen damit?
- @Florian, Sie haben Recht. Ich wurde durch früheres Verhalten irregeführt. Es blockiert nicht die jüngsten Veröffentlichungen, daher war der Satz meinungsbildend (und falsch). Antwort bearbeitet. Vielen Dank!
Antwort
Sie haben versucht, im Home-Verzeichnis des Benutzers zu konfigurieren, haproxy hat keine Berechtigung Um auf das Ausgangsverzeichnis des Benutzers zuzugreifen, verursachen diese Probleme.
Versuchen Sie es stattdessen an einem anderen Ort. Erstellen Sie ein Verzeichnis in /var/<directory>
Kommentare
- Ich habe
sudo touch /var/log/ha.log
ausprobiert undlog /var/log/ha.log local0
zu meiner Konfiguration, aber der gleiche Fehler wie obenconnection refused
. - Im Protokoll, warum geben Sie am Ende local0 an?
ch habe versucht, es wegzulassen, aber als ich neu gestartet habe, habe ich den Fehler 'log' expects <address> and <facility> as arguments.
erhalten, daher war dort etwas erforderlich. Gemäß den Anweisungen <facility> must be one of the 24 standard syslog facilities
(was meiner Meinung nach Teil des Problems sein kann)