nginx Log Dateien riesig

Die Log Dateien von den nginx Webserver waren riesig. Teilweise mehrere Gigabyte groß. Wie verkleinert man nun diese Dateien und warum hat das logrotate nicht funktioniert? Seit 2017 haben sich die Webserver Logs in einer einzigen Datei angesammelt.

nginx Log Dateien riesig

Gigabyte große nginx Log Dateien

mattionline:/var/log/nginx# ls -la
insgesamt 5053388
drwxr-xr-x  2 root        root       4096 Jun 14 12:29 .
drwxr-xr-x 11 root        root       4096 Jul 26 00:00 ..
-rw-r-----  1 mattionline adm  3583205973 Jul 31 18:25 access.log
-rw-r-----  1 mattionline adm      937822 Sep 21  2017 access.log.1
-rw-r-----  1 mattionline adm      201270 Sep 20  2017 access.log.2.gz
-rw-r-----  1 mattionline adm       89529 Sep 18  2017 access.log.3.gz
-rw-r--r--  1 root        root      35003 Sep 17  2017 access.log.4.gz
-rw-r-----  1 mattionline adm  1588523617 Jul 31 18:19 error.log
-rw-r-----  1 mattionline adm     1447742 Sep 21  2017 error.log.1
-rw-r-----  1 mattionline adm      113693 Sep 20  2017 error.log.2.gz
-rw-r-----  1 mattionline adm       47862 Sep 18  2017 error.log.3.gz
-rw-r--r--  1 root        root      17378 Sep 17  2017 error.log.4.gz
mattionline:/var/log/nginx# du -sh *
3,4G	access.log
920K	access.log.1
200K	access.log.2.gz
88K	access.log.3.gz
36K	access.log.4.gz
1,5G	error.log
1,4M	error.log.1
112K	error.log.2.gz
48K	error.log.3.gz
20K	error.log.4.gz

Anlegen des logrotate Skripts

Ich habe festgestellt, dass es überhaupt kein logrotate Skript für den nginx Webserver gab. Logrotate geht täglich durch die Logs durch und verkleinert die Dateien. Am Ende werden komprimierte gz (vergleichbar mit zip) Dateien erstellt. Somit besitzen die Bruchstücke der log Dateien nur noch eine Megabyte Größe und wachsen nie wieder in den Gigabyte Bereich rein.

Anlegen des logrotate Skripts:

Inhalt der Datei:

(Den Benutzer mattionline mit dem jeweiligen Webserver Nutzer ersetzen. Dieser ist in der /etc/nginx/nginx.conf Datei einstellbar. Die user Variable.)

/var/log/nginx/*.log {
        daily
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
        create 640 mattionline mattionline
        sharedscripts
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi; \
        endscript
        postrotate
                [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
        endscript
}

Starten von logrotate

Um logrotate manuell zum Laufen zu bekommen folgenden Befehl ausführen:

logrotate -d /etc/logrotate.d/nginx // d für debug ohne wirkliche ausführung
logrotate -f /etc/logrotate.d/nginx // f für force - tatsächliche ausführung

Fazit

Nachdem ich die Force Kommandozeile ein paar mal manuell ausgeführt habe, wurden viele kleine gz Dateien angelegt. Die Größe ist von 3GB auf maximal 300MB gefallen. Statt einer riesen Log Datei werden die alten nach und nach archiviert und verkleinert.

mattionline:/var/log/nginx# du -sh *
40K	access.log
4,0K	access.log.1
36K	access.log.10.gz
4,0K	access.log.2.gz
4,0K	access.log.3.gz
4,0K	access.log.4.gz
4,0K	access.log.5.gz
302M	access.log.6.gz
112K	access.log.7.gz
200K	access.log.8.gz
88K	access.log.9.gz
4,0K	error.log
4,0K	error.log.1
4,0K	error.log.2.gz
4,0K	error.log.3.gz
4,0K	error.log.4.gz
53M	error.log.5.gz
72K	error.log.6.gz
112K	error.log.7.gz
48K	error.log.8.gz
20K	error.log.9.gz

Problem gelöst. Log Dateien verkleinert. Keine mehr von dem Jahr 2017.

Weitere Informationen zur Funktionsweise von logrotate:

https://www.linux-magazin.de/ausgaben/2005/12/hier-geht-s-rund/

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen