Viele Dinge können passieren, wenn ein Benutzer auf einer Website landet. Es kommt sogar vor, dass Benutzeranfragen einen Server nicht erreichen, was zu einer falschen positiven Meldung führen kann, dass alles in Ordnung ist. Die Zeiten, in denen eine Website nur einen Server benutzte, sind längst vorbei. In der heutigen verteilten Welt gibt es viele Server hinter einem Load Balancer, der die Benutzerlast der Website verteilt.
Wie können Sie also wissen, ob zwischen Ihren Benutzern und Ihren Servern alles reibungslos läuft? Die Protokolle, die von Load Balancern und Proxy-Servern wie HAProxy ausgegeben werden, geben Ihnen eine andere Perspektive. Sie können Ihnen zum Beispiel sagen, wie viel Zeit Benutzeranfragen benötigen und wie viele Anfragen fehlschlagen. Diese Informationen sind wertvoll und können Ihnen bei der Fehlersuche in einer Live-Umgebung weitere Anhaltspunkte liefern.
Im heutigen Beitrag erkläre ich Ihnen kurz, wie die Protokollierung in HAProxy funktioniert, wie die Konfiguration der Protokollierung funktioniert, wie Sie die Protokolle verarbeiten und wie Sie vermeiden, dass der Speicherplatz auf Ihren Servern aufgrund großer Protokolldateien knapp wird.
Wie funktioniert die Protokollierung in HAProxy?
Wenn Sie HAProxy installieren, können Sie konfigurieren, wie Sie mit den von diesem Tool aufgezeichneten Protokollen arbeiten wollen. Sie können HAProxy zum Beispiel so konfigurieren, dass es die Protokolle gleichzeitig an verschiedene Stellen sendet. Vielleicht benötigt ein Team die Protokolle in Echtzeit, während ein anderes die Protokolle zur Ermittlung eines historischen Trends verwenden kann. Oder Sie möchten die Protokolle einfach an einen anderen Ort migrieren, z. B. an eine zentralisierte Speicherlösung für die Protokollierung.
Wenn Sie die Protokollierung für ein Tool konfigurieren, möchten Sie normalerweise, dass die Protokolle auf einer lokalen Festplatte aufgezeichnet werden. In einem Szenario, in dem viele Protokollschreibvorgänge anfallen, kann dies jedoch kontraproduktiv sein. Die Leistung könnte beeinträchtigt werden, und Sie könnten einige der Protokolle verpassen. Standardmäßig ist HAProxy so konfiguriert, dass Protokolle in einen Socket geschrieben werden, da dies schneller ist als das Senden von Protokollen über das Netzwerk oder das direkte Schreiben in eine Datei.
In der HAProxy-Dokumentation gibt es einen Abschnitt, der die Protokollierung im Detail behandelt. Sobald Sie die Grundlagen aus diesem Beitrag kennen, können Sie schnell in andere Themen eintauchen, z. B. wie man Cookies oder HTTP-Header erfasst. Sie können sogar den Typ oder die Ausführlichkeit der Protokolle konfigurieren, die Sie sehen möchten.
Wenn Sie es noch nicht getan haben, installieren Sie HAProxy. Unter Ubuntu können Sie dies folgendermaßen tun:
$ sudo apt-get install haproxy$ haproxy -vHA-Proxy version 1.8.8-1ubuntu0.11 2020/06/22Copyright 2000-2018 Willy Tarreau <[email protected]>
Konfiguration der Protokollierung für Syslog
Standardmäßig gibt es zwei Abschnitte in der HAProxy-Konfigurationsdatei: global und defaults. Im globalen Abschnitt konfigurieren Sie Low-Level-Funktionen wie Sicherheit, Leistung und Protokollierungsziele. Im Abschnitt defaults werden Einstellungen vorgenommen, die für alle anderen Proxy-Abschnitte gelten, z. B. für das Front-End und das Back-End. Das Ziel ist es, Wiederholungen zu vermeiden. In einem Beitrag auf der HAProxy-Website werden die einzelnen Abschnitte detaillierter beschrieben, aber für unseren Fall sind die Abschnitte global und defaults ausreichend.
In der Standardkonfigurationsdatei (/etc/haproxy/haproxy.cfg) gibt es für die Protokollierung etwa Folgendes:
global log /dev/log local0 log /dev/log local1 notice # ... other properties not included heredefaults log global # ... other properties not included here
Wenn Sie sich das Verzeichnis „/dev/log/“ ansehen, werden Sie einen symbolischen Link zum Journal von systemd sehen, was bedeutet, dass die Protokolle an syslog gesendet werden:
$ ls -la /dev/loglrwxrwxrwx 1 root root 28 Aug 21 22:37 /dev/log -> /run/systemd/journal/dev-log
In neueren Versionen wie Ubuntu 18.04 ist rsyslog bereits installiert. Ansonsten müssen Sie es installieren, indem Sie den Befehl „sudo apt install -y rsyslog“ auf Ihrem Server ausführen. Schauen Sie sich dann die Konfiguration im Ordner rsyslog an. In meinem Fall sieht sie wie folgt aus:
ls -la /etc/rsyslog.d/total 24drwxr-xr-x 2 root root 4096 Aug 21 22:41 .drwxr-xr-x 90 root root 4096 Aug 21 22:41 ..-rw-r--r-- 1 root root 314 Aug 15 2017 20-ufw.conf-rw-r--r-- 1 root root 255 Jun 3 02:08 21-cloudinit.conf-rw-r--r-- 1 root root 282 Jun 22 08:41 49-haproxy.conf-rw-r--r-- 1 root root 1124 Jan 30 2018 50-default.conf
Beachten Sie, dass es eine Datei mit dem Namen „49-haproxy.conf“ gibt, in der die Konfiguration für die HAProxy-Protokollierung enthalten ist. Wenn Sie eine solche Datei nicht sehen, erstellen Sie sie. Hier ist der Standardinhalt:
$ cat /etc/rsyslog.d/49-haproxy.conf# 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 logfileif $programname startswith 'haproxy' then /var/log/haproxy.log&~
Sie sehen, dass die Protokolle in die Datei /var/log/haproxy.log geschrieben werden. Von da an ist es Ihre Aufgabe, etwas mit diesen Protokollen zu tun. Möglicherweise müssen Sie jedoch rsyslog und HAProxy neu starten, bevor Sie einige Protokolle sehen können. Sie können dies tun, indem Sie die folgenden Befehle ausführen:
sudo service rsyslog restartsudo service haproxy restart
Sie sollten zumindest einige anfängliche Protokolle wie diese sehen:
$ cat /var/log/haproxy.logAug 21 22:42:44 ip-172-31-43-203 haproxy: 233/154135 (1814) : Exiting Master process...Aug 21 22:42:44 ip-172-31-43-203 haproxy: 233/154135 (1814) : Current worker 1815 exited with code 143Aug 21 22:42:44 ip-172-31-43-203 haproxy: 233/154135 (1814) : All workers exited. Exiting... (143)
Nun, da Sie Protokolle haben, ist es an der Zeit, etwas mit ihnen zu tun. Es spielt keine Rolle, welches Tool Sie für die Verarbeitung Ihrer Protokolle aus der Datei haproxy.log verwenden. Sie können zum Beispiel ein Tool wie SolarWinds® Loggly® wählen, das auch einen Agenten hat, um Logs zu verarbeiten und sie automatisch an Loggly zu senden.
Back-End-Server konfigurieren
Wenn Sie ausprobieren möchten, wie das Logging standardmäßig funktioniert, wenn Sie weitere Proxys hinzufügen, können Sie dies tun, indem Sie eine Konfiguration wie die folgende am Ende der haproxy.conf file:
backend webserversbalance roundrobinserver webserver1 Your-Webserver1-IP:80 checkserver webserver2 Your-Webserver2-IP:80 checkoption httpchk
Ersetzen Sie „Your-Webserver1-IP“ und „Your-Webserver2-IP“ durch die IP-Adressen der Server, an die Sie den Datenverkehr umleiten möchten. Speichern Sie die Änderungen und starten Sie den HAProxy-Dienst neu. Beachten Sie, dass im Abschnitt „Back-End-Proxy“ keine Protokollierungskonfiguration erforderlich ist. Sie sollten nun in der Lage sein, Datenverkehr über HAProxy an diese Back-End-Server zu senden, und die Protokolle werden automatisch in die Datei haproxy.log geschrieben.
Protate Logs With Logrotate
Als gute Bürger müssen wir schließlich sicherstellen, dass die Datei haproxy.log nicht den gesamten Server-Speicher belegt. Dazu kann man logrotate verwenden. In meinem Fall ist es standardmäßig installiert, aber Sie können es mit dem folgenden Befehl installieren:
sudo apt-get install logrotate
Dann haben Sie eine Konfigurationsdatei wie die folgende, um die haproxy.log-Datei zu bereinigen und zu komprimieren:
cat /etc/logrotate.d/haproxy/var/log/haproxy.log { daily rotate 52 missingok notifempty compress delaycompress postrotate invoke-rc.d rsyslog rotate >/dev/null 2>&1 || true endscript}
Wenn Sie die obige Konfiguration verwenden, wendet logrotate diese Regel jeden Tag an und behält alle Protokolle, die 52 Tage alt oder neuer sind. Außerdem werden die rotierten Dateien in ein gzip-Format komprimiert. Sie brauchen sich keine Sorgen zu machen, dass Sie zu viele Protokolldateien auf dem Server haben – logrotate löscht alle älteren Dateien für Sie. Durch diese einfache Konfiguration müssen Sie nicht mehr mitten in der Nacht aufstehen, um Protokolle zu löschen.
Um sicherzugehen, dass die Konfiguration funktioniert, starten Sie HAProxy und rsyslog neu:
sudo service rsyslog restartsudo service haproxy restart
Abschluss
Ich habe nur an der Oberfläche der Protokollierungsoptionen gekratzt, die HAProxy bietet. Sie können in der offiziellen Dokumentation weiter nachschlagen. Es gibt auch einen ausgezeichneten Beitrag im HAProxy-Blog, der genauer darauf eingeht, wie man das Format der Protokolle ändern kann und sogar, wie man Profiling-Metriken erhält.
Bitte beachten Sie, dass ich einen Ubuntu 18.04-Server in AWS verwendet habe und die meisten der hier besprochenen Konfigurationen standardmäßig vorhanden sind. Nicht jeder Server wird so ausgestattet sein, aber zumindest wissen Sie jetzt, wie die Protokollierung in HAProxy funktioniert und wo sich diese Konfigurationen befinden, damit Sie sie bei Bedarf ändern können. Viel Spaß beim Loggen!