Unterstützt HAProxy die Protokollierung in einer Datei?

14

Ich habe gerade Haproxy auf meinem Testserver installiert .

Gibt es eine Möglichkeit, die Protokolle in eine lokale Datei anstatt in syslog zu schreiben?

Dies ist nur zum Testen gedacht, damit ich nicht anfange, Ports zu öffnen oder Syslog mit all meinen Testdaten zu überladen.

Leider dreht sich die einzige Information, die ich finden kann, um das Protokollieren auf einem Syslog-Server.

Ich habe versucht mit:

log /home/user/ha.log local0

in meiner Konfig. Aber das sagte mir:

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

Als ich neu gestartet habe. Also habe ich die Datei mit erstellt touch /home/user/ha.logund neu gestartet.

[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 zu sehen?

IGGt
quelle
2
Ich glaube nicht, dass HAProxy sich in eine Datei einloggen kann, und ich vermute, dass der Grund dafür darin liegt, dass das Schreiben auf die Festplatte ein blockierender Vorgang ist. Warum wollen Sie Syslog wirklich nicht nutzen? Config ist gar nicht so knifflig. 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 nicht möchten, dass die HAProxy-Protokolle nicht mit allem gemischt werden sonst.
Michael - sqlbot

Antworten:

14

Haproxy unterstützt die Protokollierung in Dateien einfach nicht. Wie in der Dokumentation ( https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#3.1-log ) angegeben, verwendet die Anweisung "log" als ersten Parameter eine Adresse. Wenn es sich um eine Datei handelt, handelt es sich um einen Unix-Socket, und HAProxy spricht mit diesem Socket im Syslog-Format. Haproxy ist so konzipiert, weil es für Proxy-Anforderungen und nicht für das Schreiben von Dateien zuständig 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 log /tmp/haprxoy_log.sock Folgendes hinzufügen: In Ihrer haproxy.cfg, um es zu testen.

user801247
quelle
Ich erhalte die Meldung "E: Paket-Logstash kann nicht gefunden werden". Wurde Logstash aus Ubuntu entfernt?
user568021
7

Sie können die Konfigurationsdatei für das Haproxy-Protokoll unter so ändern, dass /etc/rsyslog.d/die Datei auf den gewünschten Pfad verweist . Nicht sicher über andere Distribution. Für mich benutze ich Debian. Ich habe mich geändert /etc/rsyslog.d/49-haproxy.conf, um zu zeigen /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
&~

Sie sollten auch den Protokollpfad in /etc/logrotate.d/haproxyden neuen Pfad aktualisieren . Damit dreht und komprimiert es die Logdatei im neu konfigurierten Pfad mit gzip.

Starten Sie dann rsyslog.service neu.

sudo systemctl restart rsyslog.service

Die haproxy.log.*Datei befindet sich nun im /var/log/haproxy/Verzeichnis.

Fonzie
quelle
Wie erstelle ich ein separates Protokoll für Fehler wie /var/log/haproxy-errors.log, ohne das ursprüngliche haproxy.log zu beeinflussen?
Khurshid Alam
0

Sie haben versucht, im Home-Verzeichnis des Benutzers zu konfigurieren. Haproxy hat keine Berechtigung, auf das Home-Verzeichnis des Benutzers zuzugreifen. Dies kann zu Problemen führen.

Versuchen Sie es stattdessen an einem anderen Ort. Erstellen Sie ein Verzeichnis in /var/<directory>

log /var/<directory>/ha.log
KKD
quelle
2
Ich habe es versucht sudo touch /var/log/ha.logund log /var/log/ha.log local0zu meiner Konfiguration hinzugefügt , habe aber den gleichen Fehler wie oben erhalten connection refused.
IGGt
Im Log, warum gibst du am Ende local0?
KKD
1
Ich habe versucht, es wegzulassen, aber als ich neu gestartet habe, wurde der Fehler angezeigt, 'log' expects <address> and <facility> as arguments.sodass dort etwas erforderlich war. Nach den Anweisungen <facility> must be one of the 24 standard syslog facilities(von denen ich denke, dass sie Teil des Problems sind)
IGGt