Ubuntu 16.04 Server: Installation und Konfiguration von logrotate

logrotate ist ein Werkzeug, das Logdateien basierend auf Häufigkeits- oder Größenbedingungen ersetzt und vorherige Dateien verwaltet, indem es sie speichert, komprimiert oder löscht. Auf Ubuntu kann es fortlaufend wachsende Logs verwalten, aber der tatsächliche Ersetzungszeitpunkt hängt vom Ausführungsplan von logrotate und den Konfigurationsbedingungen ab.

Unterstützung und Vorbereitung für Ubuntu 16.04

Die allgemeine Sicherheitswartung für Ubuntu 16.04 LTS und die allgemeine erweiterte Sicherheitswartung (ESM) für Ubuntu Pro sind beendet. Canonical bietet separate Legacy-Zusatzdienste an, daher prüfen Sie die Abdeckung und Kosten im Ubuntu 16.04 Support Guide und planen Sie ein Upgrade auf eine unterstützte Ubuntu-Version, wenn möglich. Die unten aufgeführten Grundprinzipien gelten auch für andere Versionen, aber das detaillierte Verhalten kann je nach installierter logrotate-Version und Ausführungsplan variieren.

Prüfen Sie zuerst, ob es installiert ist, und falls das Paket auf Ubuntu nicht vorhanden ist, installieren Sie es. Bevor Sie die Einstellungen des Produktionsservers ändern, stellen Sie sicher, dass Sie die Backup- und Wiederherstellungsmethoden für bestehende Einstellungen und erforderliche Logs prüfen.

logrotate --version
sudo apt update
sudo apt install logrotate

Überprüfen Sie die Standardeinstellungen und den Ausführungsplan

Globale Einstellungen befinden sich in der Regel in /etc/logrotate.conf, und individuelle Einstellungen werden gelesen, wenn die Datei so konfiguriert ist, dass /etc/logrotate.d/ enthalten ist. Überprüfen Sie die tatsächlichen Dateien auf dem Server. In Umgebungen, in denen das Apache-Paket installiert ist, kann /etc/logrotate.d/apache2 existieren, aber der Protokollpfad und die Einstellungen variieren je nach Installationsumgebung.

cat /etc/logrotate.conf
ls -l /etc/logrotate.d/
cat /etc/logrotate.d/apache2

Auf Systemen ohne Apache-Konfigurationsdateien kann der letzte Befehl fehlschlagen. Verwalten Sie denselben Protokollpfad nicht redundant in zwei Konfigurationen. logrotate läuft nicht kontinuierlich von selbst und plant auch nicht seine eigene Ausführung. Unter Ubuntu 16.04 wird es normalerweise periodisch über /etc/cron.daily/logrotate ausgeführt, prüfen Sie also diese Datei und ob sie über cron ausgeführt wird. In anderen Versionen können die tatsächlichen Zeitpläne unterschiedlich sein, zum Beispiel bei systemd-Timern.

Erstellen Sie unabhängige Testprotokolle und Einstellungen

Die folgende Übung verwendet ein neues temporäres Verzeichnis anstelle von Produktionsprotokollen. Führen Sie sie der Reihe nach in derselben Shell aus und überprüfen Sie die Ausgabepfade. Es verwendet ein temporäres Verzeichnis und separate Statusdateien, sodass die bestehenden Logrotate-Einstellungen oder -Status des Systems nicht verändert werden.

demo_dir=$(mktemp -d)
printf 'first log line\n' > "$demo_dir/app.log"
cat > "$demo_dir/logrotate.conf" <<EOF
$demo_dir/app.log {
    daily
    rotate 3
    missingok
    notifempty
    compress
    delaycompress
    create 0600
}
EOF
printf 'Test directory: %s\n' "$demo_dir"
cat "$demo_dir/logrotate.conf"

daily ist eine tägliche Rotationsbedingung, und rotate 3 ist eine Einstellung, die frühere Protokolle für bis zu drei Rotationen aufbewahrt. missingok verhindert Fehler, wenn eine Datei nicht existiert, und notifempty rotiert keine leeren Protokolle. compress komprimiert frühere Protokolle, und delaycompress verzögert die Komprimierung des zuletzt rotierten Protokolls bis zur nächsten Rotation. create 0600 setzt Berechtigungen beim Erstellen neuer Protokolldateien nach der Rotation.

Die Konfigurationsdatei in diesem Beispiel ist nicht im Systemplan registriert, und keine tatsächliche Anwendung schreibt in das Testprotokoll. Das Setzen von daily erstellt keinen eigenen Ausführungsplan. Lesen Sie das offizielle Logrotate-Handbuch , um Optionen und Bedingungen zu überprüfen, die für Ihre installierte Version geeignet sind.

Überprüfung von Testläufen und tatsächlichen Rotationen

Überprüfen Sie zunächst die Einstellungen und das erwartete Verhalten im Debug-Modus. -d ändert keine Protokolle oder aktualisiert Zustandsdateien. Mit einer neuen Zustandsdatei kann die Ausgabe anzeigen, dass es noch nicht Zeit für eine Rotation ist.

logrotate -d -s "$demo_dir/state" "$demo_dir/logrotate.conf"

Erzwingen Sie eine Rotation nur in der Übungsdatei und überprüfen Sie die Ergebnisse. -f erzwingt die Rotation, selbst wenn die Bedingungen nicht erfüllt sind, daher sollte es nicht leichtfertig auf tatsächlichen Betriebsprotokollen verwendet werden.

logrotate -v -f -s "$demo_dir/state" "$demo_dir/logrotate.conf"
ls -l "$demo_dir"
cat "$demo_dir/app.log.1"

Wenn erfolgreich, befindet sich der ursprüngliche Inhalt in app.log.1 und eine neue app.log wird erstellt. Der zuletzt rotierte Teil ist aufgrund von delaycompress noch nicht komprimiert. Nachdem Inhalte zum neuen Protokoll hinzugefügt und die Rotation noch einmal erzwungen wurde, wird der zuvor rotierte Teil normalerweise als app.log.2.gz komprimiert.

printf 'second log line\n' >> "$demo_dir/app.log"
logrotate -v -f -s "$demo_dir/state" "$demo_dir/logrotate.conf"
ls -l "$demo_dir"
gzip -cd "$demo_dir/app.log.2.gz"

Sie können die erste Protokollzeile aus dem letzten Befehl überprüfen. Diese Übung reproduziert keinen laufenden Dienst, der Protokolle aufzeichnet. Wenn die Übung abgeschlossen ist, überprüfen Sie den temporären Pfad, in dem die Ausgabe gespeichert wurde, und löschen Sie alle Dateien, die Sie nicht mehr benötigen.

Anwendung auf einen produktiven Dienst

Ein laufendes Programm kann weiterhin in die vorherige Protokolldatei schreiben, selbst nachdem die Datei umbenannt wurde. Überprüfen Sie das bereitgestellte Verfahren, damit der Dienst die Protokolldatei erneut öffnet, und sehen Sie sich das postrotate-Skript aus dem vorhandenen Paket an, und überprüfen Sie, ob der Besitzer, die Gruppe und die Berechtigungen der neuen Datei für den Dienst angemessen sind. Bevor Sie die vorhandenen Apache-Regeln ändern, überprüfen Sie die Verteilungs- und Dienstdokumentation und sichern Sie Ihre Konfiguration.

copytruncate kopiert das Protokoll und kürzt dann das Original vor Ort; es kann für Programme verwendet werden, die ihre Protokolldateien nicht erneut öffnen können, aber zwischen dem Kopieren und Kürzen können Protokolle verloren gehen. Wann immer möglich, sollte zuerst geprüft werden, ob der Dienst eine Möglichkeit hat, das Protokoll erneut zu öffnen. rotate 3 bezieht sich auf die Anzahl der Rotationen, die beibehalten werden sollen, nicht auf eine Begrenzung in Tagen oder Größe, daher sollten Aufbewahrungsrichtlinie und Festplattennutzung separat überprüft werden.

Prüfen, wenn die Rotation ausbleibt

  • Überprüfen, ob die Konfigurationsdatei in den globalen Einstellungen enthalten ist und ob der Zielpfad mit dem tatsächlichen Protokoll übereinstimmt. Leere Dateien werden in notifempty nicht rotiert.
  • Überprüfen Sie, ob der Cron oder Timer tatsächlich läuft und ob eine Rotation basierend auf der Statusdatei und den periodischen Bedingungen erforderlich ist. daily garantiert keine Rotation zur genauen Tageszeit in Umgebungen, die einmal täglich überprüft werden.
  • Suchen Sie in der Debug-Ausgabe und den Scheduler-Fehlerprotokollen nach Problemen mit Berechtigungen, Eigentum, Syntax und doppelten Pfaden. Überprüfen Sie die Ergebnisse und Wiederherstellungspläne, bevor Sie -f auf die Betriebsprotokolle anwenden.