GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

So richten Sie die Protokollrotation mit Logrotate unter Ubuntu 18.04/20.04 ein

Protokolldateien sollen Informationen über Systemaktivitäten für einen angemessenen Zeitraum speichern, aber Systemprotokoll-Daemons bieten keine Möglichkeit, die Größe von Protokolldateien zu steuern. Wenn sie nicht aktiviert werden, können Protokolldateien daher anwachsen und den gesamten verfügbaren Partitionsspeicherplatz verbrauchen, auf dem sie sich befinden. Um zu verhindern, dass Protokolldateien Ihr System vollständig füllen, können die Protokollnachrichten rotiert werden, dh wenn ein bestimmter Schwellenwert erreicht ist, wird die alte Protokolldatei geschlossen und eine neue Protokolldatei geöffnet.

Hier zeige ich Ihnen, wie Sie die Protokolldateien mit logrotate unter Ubuntu 18.04/20.04 rotieren.

Was ist Protokollrotation?

Die Protokollrotation ist ein Prozess, der diese Probleme löst, indem die aktuelle Protokolldatei regelmäßig archiviert und eine neue gestartet wird. Es benennt die aktuellen Protokolldateien um und komprimiert sie optional, löscht alte Protokolldateien und zwingt das Protokollsystem, mit der Verwendung neuer Protokolldateien zu beginnen. Es läuft normalerweise automatisch durch den cron Nützlichkeit. Mit der Protokollrotation können Sie

  • Starten Sie eine neue Protokolldatei nach einem Zeitplan, z. B. täglich, wöchentlich oder monatlich
  • alte Protokolldateien komprimieren, um Speicherplatz zu sparen
  • beschneiden Sie alte Archive, sodass Sie nur eine bestimmte Anzahl alter Protokolle behalten.
  • alte Protokolldateien mit einem Datumsstempel umbenennen, damit Sie wissen, wo Sie nach älteren Protokollen suchen müssen.
  • Befehle ausführen, bevor oder nachdem ein Satz von Protokollen rotiert wird.

Sie können die Protokollrotation als den Prozess sehen, der eine aktuelle Protokolldatei umbenennt und eine neue Protokolldatei für neue Protokolleinträge einrichtet. Wenn eine Protokolldatei rotiert wird, wird die alte Protokolldatei normalerweise in eine Datei kopiert, die das Rotationsdatum enthält.

1) Die Konfigurationsdateien von logrotate

Unter Ubuntu 18.04 sind die Konfigurationsdateien von logrotate /etc/logrotate.conf , zusammen mit allen Dateien in /etc/logrotate.d Die Hauptdatei logrotate.conf Datei gibt alle Standardeinstellungen und Systemdateien an, die gedreht werden sollen. Die Datei enthält einige Optionen, die durch die Kommentare gut erklärt werden.

cat /etc/logrotate.conf 
# see "man logrotate" for details
# rotate log files weekly
weekly

# use the syslog group by default, since this is the owning group
# of /var/log/syslog.
su root syslog

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0660 root utmp
    rotate 1
}

# system-specific logs may be configured here

Die Hauptoptionen von logrotate sind:

  • wöchentlich: rotiert die Logfiles einmal pro Woche
  • su root syslog: archiviert die Protokolle unter Verwendung des spezifischen Benutzers (root) und Gruppe (syslog) um Probleme mit Berechtigungen zu vermeiden
  • Um 4 drehen: stellt sicher, dass vier alte Versionen der Datei gespeichert werden. Rotiert ein bestimmtes Protokoll viermal, bevor es gelöscht wird, sodass die Protokolle vier Wochen lang online bleiben.
  • erstellen: Die alte Datei wird unter einem neuen Namen gespeichert und eine neue Datei erstellt
  • komprimieren: compress bewirkt, dass logrotate Protokolldateien komprimiert, um Speicherplatz zu sparen. Dies geschieht standardmäßig mit gzip, aber Sie können ein anderes Programm angeben
  • enthalten: Diese wichtige Option stellt sicher, dass der Inhalt des Verzeichnisses /etc/logrotate.d ist enthalten. In diesem Verzeichnis sind Dateien vorhanden, die angeben, wie mit einigen einzelnen Protokolldateien umgegangen werden soll.

Jede Datei in /etc/logrotate.d wird verwendet, um zusätzliche Einstellungen hinzuzufügen oder die Standardeinstellungen für bestimmte Dateien zu überschreiben. Der Ordner enthält auch die Logrotate-Konfiguration aller von Ihnen installierten Pakete, die eine Log-Rotation benötigen

# ls -l /etc/logrotate.d
total 40
-rw-r--r-- 1 root root 120 Nov 2 2017 alternatives
-rw-r--r-- 1 root root 442 Oct 23 2017 apache2
-rw-r--r-- 1 root root 126 Nov 20 16:39 apport
-rw-r--r-- 1 root root 173 Apr 20 10:08 apt
-rw-r--r-- 1 root root 112 Nov 2 2017 dpkg
-rw-r--r-- 1 root root 146 Apr 17 17:35 lxd
-rw-r--r-- 1 root root 845 Jan 12 10:57 mysql-server
-rw-r--r-- 1 root root 501 Jan 14 16:19 rsyslog
-rw-r--r-- 1 root root 178 Aug 15 2017 ufw
-rw-r--r-- 1 root root 235 Apr 17 14:53 unattended-upgrades

Sie können zum Beispiel die Logrotate-Konfiguration für den Apache-Webserver sehen

# cat /etc/logrotate.d/apache2 
/var/log/apache2/*.log {
	daily
	missingok
	rotate 14
	compress
	delaycompress
	notifempty
	create 640 root adm
	sharedscripts
	postrotate
                if invoke-rc.d apache2 status > /dev/null 2>&1; then \
                    invoke-rc.d apache2 reload > /dev/null 2>&1; \
                fi;
	endscript
	prerotate
		if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
			run-parts /etc/logrotate.d/httpd-prerotate; \
		fi; \
	endscript
}

Logrotate enthält einige zusätzliche Optionen, die Sie oben sehen können:

  • täglich: Log auf Basistag rotiert
  • missingok: Keinen Fehler auslösen, wenn das Protokoll fehlt
  • delaycompress: Komprimieren Sie die Datei erst, wenn sie bereits gedreht wurde. Dies soll eine Beschädigung verhindern, wenn der Daemon die Protokolldatei nicht sofort schließt.
  • notifyempty: Protokolldatei nicht rotieren, wenn sie leer ist
  • 640-Root-Administrator erstellen: Dadurch werden neue Protokolldateien mit festgelegten Berechtigungen, Eigentümern und Gruppen erstellt
  • gemeinsame Skripte: Wenn der Platzhalter mit mehreren Dateien übereinstimmt, führen Sie alle Skripte einmal für alle Dateien aus
  • postrotate/endscript: Gibt einige Befehle oder Skripte an, die bis zum endscript ausgeführt werden sollen Schlüsselwort, nachdem die Protokolle rotiert wurden.
  • prerotate/endscript: als postrotate/endscript , gibt es Befehle oder Skripte an, die ausgeführt werden sollten, bevor die Protokollrotation beginnt.

Informationen zu den zusätzlichen Optionen finden Sie im Handbuch

man logrotate

2) Protokollrotation mit logrotate konfigurieren

Der Befehl logrotate benennt (oder rotiert) Protokolldateien normalerweise zyklisch um; Die Protokolldatei wird so umbenannt, dass sie eine numerische oder Datumserweiterung enthält, und es wird eine neue Protokolldatei erstellt, die Systeminformationen akzeptiert. Wenn logrotate so konfiguriert ist, dass nur zwei Kopien alter Protokolldateien aufbewahrt werden, wird nach zwei Protokollrotationen automatisch die älteste Protokolldatei entfernt.

Normalerweise ist der Befehl logrotate standardmäßig auf Ihrem Ubuntu 18.04 installiert und Sie können die Version wie folgt überprüfen

# logrotate --version
logrotate 3.11.0

Standardmäßig wird logrotate täglich ausgeführt, indem das Shell-Skript /etc/cron.daily/logrotate ausgeführt wird Sie werden sehen, dass die anderen Cron-Dateien keine Logrotate-Datei enthalten

cat /etc/cron.daily/logrotate 
#!/bin/sh

# Clean non existent log file entries from status file
cd /var/lib/logrotate
test -e status || touch status
head -1 status > status.clean
sed 's/"//g' status | while read logfile date
do
    [ -e "$logfile" ] && echo "\"$logfile\" $date"
done >> status.clean
mv status.clean status

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

Sie können sehen, was die logrotate-Konfiguration der Anwendung tun würde, wenn sie mit -d ausgeführt wird Parameter des Befehls

# logrotate -d /etc/logrotate.d/mysql-server 
reading config file /etc/logrotate.d/mysql-server
Reading state from file: /var/lib/logrotate/status
Allocating hash table for state file, size 64 entries

Handling 1 logs

rotating pattern: /var/log/mysql.log /var/log/mysql/*log  after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/mysql.log
error: skipping "/var/log/mysql.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
Creating new state
considering log /var/log/mysql/error.log
Creating new state
  Now: 2018-05-22 06:02
  Last rotated at 2018-05-22 06:00
  log does not need rotating (log has been already rotated)

Sie können die Protokollrotation als Root-Benutzer und als Nicht-Root-Benutzer konfigurieren.

a) Logrotation für installierte Serverpakete einrichten

Logrotate-Konfigurationsdateien als Root-Benutzer werden in /etc/logrotate.d erstellt Ordner täglich. Beispielsweise konfigurieren wir die Protokollrotation für den Überwachungstool-Supervisor. Zuerst erstellen wir die Protokollrotationsdatei, in der wir die Konfigurationsdatei angeben, in der die Protokolle gespeichert werden

# vim /etc/logrotate.d/supervisor
/var/log/supervisor/superviz.log {
        daily
        create 0640 root root
        missingok
        dateext
        rotate 3
        size=1M
        notifempty
        sharedscripts
        mail [email protected]
}

Lassen Sie uns einige Optionen erklären:

  • Datumstext: verwendet das Datum als Erweiterung für alte Versionen der Protokolldateien
  • Größe: protokolliert Dateien, die größer werden als die hier angegebene Größe
  • Mail: um logrotate anzuweisen, seinen Inhalt per E-Mail an die angegebene Adresse zu senden, bevor er überschrieben wird. Sie müssen einen funktionierenden Mailserver haben

Jetzt können wir die Konfiguration testen, indem wir logrotate im Debug-Modus aufrufen, der auf die Hauptkonfiguration zeigt, die unseren Ordner enthält. Der Befehl zeigt einige Informationen, aber wir sortieren nur die über unsere Konfiguration

# logrotate /etc/logrotate.conf --debug
reading config file /etc/logrotate.conf
including /etc/logrotate.d
reading config file alternatives
reading config file apache2
reading config file apport
reading config file apt
reading config file dpkg
reading config file lxd
reading config file mysql-server
reading config file rsyslog
reading config file supervisor
reading config file ufw
reading config file unattended-upgrades
Reading state from file: /var/lib/logrotate/status
...
...
rotating pattern: /var/log/supervisor/supervisord.log  1048576 bytes (3 rotations)
empty log files are not rotated, old logs mailed to [email protected]
switching euid to 0 and egid to 106
considering log /var/log/supervisor/supervisord.log
Creating new state
  Now: 2018-05-22 08:16
  Last rotated at 2018-05-22 08:00
  log does not need rotating (log size is below the 'size' threshold)
switching euid to 0 and egid to 0
....
....

Sie können sehen, dass unsere Konfiguration noch nicht gedreht werden muss. Dies liegt daran, dass die Bedingungsgröße noch nicht verifiziert wurde. Wenn dieser Befehl fehlerfrei ausgeführt wird, bedeutet dies, dass die Konfiguration gut aussieht.

b) Protokollrotation für benutzerdefinierte Anwendung einrichten

Sie können die Protokollrotation für benutzerdefinierte Anwendungen konfigurieren, die Protokolle generieren und als Nicht-Root-Benutzer ausgeführt werden. Standardmäßig wird logrotate täglich ausgeführt. Wenn wir unsere Anwendung also stündlich ausführen müssen, erstellen wir die logrotate-Konfiguration außerhalb des Standardordners.

Nehmen wir ein Beispiel, indem wir die Protokollrotation für Discord konfigurieren. Wir erstellen einen persönlichen Ordner, der die Hauptkonfigurationsdatei von logrotate und einen Ordner für Protokolldateien enthält. Diese Anwendung hat kein Verständnis für die Log-Rotation, daher handhabt logrotate dies durch die Verwendung einer Copy-and-Truncate-Implementierung

$ vim apps/logrotate.conf
/home/alain/apps/logs/discord.log {
        hourly
        copytruncate
        missingok
        dateext
        rotate 10
        compress
}

Wir haben neue Optionen copytruncate verwendet Dadurch wird die alte Protokolldatei nach dem Erstellen einer Kopie an Ort und Stelle abgeschnitten, anstatt die alte Datei zu verschieben und eine neue zu erstellen. Dies ist nützlich für Dienste, denen nicht gesagt werden kann, dass sie ihre Protokolldateien schließen sollen.

Wir können unsere Konfiguration testen, müssen aber eine Zustandsdatei angeben. Diese Datei zeichnet auf, was logrotate bei der letzten Ausführung gesehen und getan hat, damit es weiß, was bei der nächsten Ausführung zu tun ist. Beachten Sie, dass wir den Befehl als Nicht-Root-Benutzer

ausführen
$ logrotate /home/alain/apps/logrotate.conf --state /home/alain/apps/logrotate-state --verbose
reading config file /home/alain/apps/logrotate.conf
Reading state from file: /home/alain/apps/logrotate-state
Allocating hash table for state file, size 64 entries

Handling 1 logs

rotating pattern: /home/alain/apps/logs/discord.log  hourly (10 rotations)
empty log files are rotated, old logs are removed
considering log /home/alain/apps/logs/discord.log
Creating new state
  Now: 2018-05-22 10:09
  Last rotated at 2018-05-22 10:00
  log does not need rotating (log has been already rotated)

Wenn Sie den gleichen Befehl nach ein paar Stunden versuchen, können Sie einige zusätzliche Informationen in der Ausgabe sehen, wie z. B. die Kürzungs- und Komprimierungsinformationen

logrotate /home/alain/apps/logrotate.conf --state /home/alain/apps/logrotate-state --verbose
reading config file /home/alain/apps/logrotate.conf
Reading state from file: /home/alain/apps/logrotate-state
Allocating hash table for state file, size 64 entries
Creating new state

Handling 1 logs

rotating pattern: /home/alain/apps/logs/discord.log  hourly (10 rotations)
empty log files are rotated, old logs mailed to [email protected]
considering log /home/alain/apps/logs/discord.log
  Now: 2018-05-22 22:52
  Last rotated at 2018-05-22 10:23
  log needs rotating
rotating log /home/alain/apps/logs/discord.log, log->rotateCount is 10
dateext suffix '-2018052222'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
copying /home/alain/apps/logs/discord.log to /home/alain/apps/logs/discord.log-2018052222
truncating /home/alain/apps/logs/discord.log
compressing log with: /bin/gzip

Sie müssen beachten, dass eine Logrotate-Konfiguration durch einen Dateiglob definiert wird, der mit den Protokolldateien übereinstimmt, gefolgt von einer Reihe von Anweisungen, die in geschweiften Klammern eingeschlossen sind. Wenn eine Option nicht in der Zeilengruppe angegeben ist, die an den Namen der Protokolldatei angehängt ist, die Option der obersten Ebene aus /etc/logrotate.conf hat Vorrang. Rotierte Protokolldateien werden nirgendwo gespeichert; Sie sind einfach weg, also sollten Sie daran denken, Maßnahmen zu ergreifen.

Lesen Sie auch:

  • So überprüfen Sie Cron-Protokolle unter Ubuntu 18.04
  • lnav - Tool zum Anzeigen und Analysieren von Protokolldateien vom Linux-Terminal
  • So verwenden Sie den systemd-Befehl journalctl zum Verwalten von Protokollen

Ubuntu
  1. So richten Sie einen FTP-Server mit VSFTPD unter Ubuntu 20.04 ein

  2. So richten Sie einen FTP-Server mit VSFTPD unter Ubuntu 18.04 ein

  3. So richten Sie einen Apache Tomcat-Cluster mit 3 Knoten unter Ubuntu ein

  4. So richten Sie GlassFish 4.1 mit JAVA 8 in Ubuntu 15.04 ein

  5. So richten Sie IP-Failover mit KeepAlived unter Ubuntu und Debian ein

So installieren Sie MongoDB in Ubuntu 22.04/20.04

So installieren Sie PHP 8 unter Ubuntu 22.04/20.04

So installieren Sie AngularJS unter Ubuntu 22.04/20.04

So installieren Sie KDE Plasma 5.16 auf Ubuntu 16.04/Ubuntu 18.04, 19.04

So installieren Sie Logrotate unter Ubuntu 16.04 LTS

So richten Sie die Protokollrotation mit Logrotate unter Linux ein und verwalten sie