HAProxy-Logging
Dieser Artikel dokumentiert unser Ubuntu-Lucid-Setup aus dem Jahr 2010. Er verwendet die Legacy-rsyslog-Konfiguration und die Upstart-Dienstbefehle aus diesem Release, nicht die einer aktuellen Ubuntu-Installation.
Bei Transloadit nutzen wir HAProxy, „den zuverlässigen, hochperformanten TCP/HTTP-Load-Balancer“, damit wir verschiedene Dienste über einen Port anbieten können. Je nach Hostname kann eine Anfrage an Port 80 beispielsweise entweder an Node.js (im Fall von api.transloadit.com) oder an Nginx (im Fall von www.transloadit.com) weitergeleitet werden. HAProxy hat uns gute Dienste geleistet, und die Einrichtung war ein Kinderspiel. Doch HAProxy unter Ubuntu Lucid zum Loggen zu bewegen, erwies sich als schwieriger als gedacht. Alle Tutorials, die ich fand, behandelten entweder das Logging nicht oder enthielten veraltete Informationen. Google war plötzlich nicht mehr mein Freund.
HAProxy möchte loggen
Aus Performance- und Wartungsgründen schreibt HAProxy Logs nicht direkt in Dateien. Stattdessen möchte es an einen Syslog-Server loggen. Dabei handelt es sich um einen separaten Linux-Daemon, mit dem die meisten Server bereits ausgestattet sind. HAProxy verlangt allerdings, dass dieser auf UDP-Port 514 lauscht, und das ist üblicherweise nicht aktiviert.
Ein Syslog-Server nimmt Log-Einträge entgegen, entscheidet, welche davon interessant sind, und schreibt diese hochoptimiert auf die Festplatte. All diese Aspekte lassen sich nach Ihren Wünschen konfigurieren.
Wenn wir uns den Anfang Ihrer aktuellen Datei /etc/haproxy/haproxy.cfg ansehen, finden wir möglicherweise so etwas wie:
global
maxconn 10000
ulimit-n 65536
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
Wie Sie sehen, gibt 127.0.0.1 an, wo HAProxy nach einem Syslog-Server zum Loggen sucht. Unter Ubuntu
Lucid ist der Standard-Syslog-Daemon
rsyslogd, sorgen wir also dafür, dass
dieser HAProxy-Log-Einträge akzeptiert.
Rsyslogd heißt HAProxy willkommen
Die meisten Google-Ergebnisse zum Thema Logging mit HAProxy rieten mir, die Datei
/etc/default/rsyslog zu ändern, doch diese Datei wird unter dem neuen System
upstart inzwischen vollständig ignoriert. Selbst wenn Sie HAProxy dazu
bringen, sich an die Standarddatei zu halten (ja, ich habe es versucht), zwingt das rsyslogd
zudem in den Kompatibilitätsmodus. Das ist nicht nur schade, sondern, wie sich herausstellt, auch
unnötig.
Mit den folgenden Konfigurationszeilen:
$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514
lauscht rsyslogd ausschließlich auf dem Loopback-Interface. Setzen Sie einen nicht authentifizierten Syslog-Listener niemals dem öffentlichen Netzwerk aus.
Wo diese Zeilen hingehören, fragen Sie? Nun, wenn Sie den UDP-Syslog-Port ausschließlich für den
HAProxy-Dienst verwenden, können Sie alles in nur einer Datei /etc/rsyslog.d/haproxy.conf eintragen bzw. einkommentieren:
# .. otherwise consider putting these three in /etc/rsyslog.conf instead:
$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514
# ..and in any case, put these two in /etc/rsyslog.d/haproxy.conf:
local0.* -/var/log/haproxy_0.log
local1.* -/var/log/haproxy_1.log
Führen Sie jetzt kurz Folgendes aus:
restart rsyslog
Und schon sind Sie fertig. Suchen Sie nach HAProxy-Logs in:
tail -f /var/log/haproxy*.log
Und vergessen Sie nicht, das Debug-Level in der Datei /etc/haproxy/haproxy.cfg anzupassen.
Viel Spaß beim Loggen!
