Protokollrotation in Nginx

Protokollrotation in Nginx

Ich habe ein Beispiel für die Protokollrotation in Nginx gefundenHier

Aber ein einfacher Test mit:

    set $date "2018-08-24";
    access_log /home/tim/log/access-http-$date.log default;

erzeugt eine Protokolldatei mit dem Namen access-http-.log. Ich verwende nginx 1.13.6 (mit OpenResty).

Aktualisieren

Nach viel Hacken und Optimieren habe ich das folgende Logrotate-Skript entwickelt, um die verschiedenen von nginx erstellten Protokolldateien zu rotieren. Ich habe es in /etc/logrotate abgelegt. Das verbleibende Problem ist, dass die Protokolle nicht täglich rotieren (ich bin mir derzeit nicht sicher, warum), aber logrotate -f <filename>genau das gewünschte Ergebnis erzeugt.

Ein interessanter Hinweis ist, dass es nginx -s reloadanstelle von USR1 verwendet werden kann. Leider wird dies auf der Protokollierungsseite von Nginx nicht erwähnt, aber ich habe es gefunden (in der Manpage, wenn ich mich recht erinnere). Ich erstelle OpenResty/Nginx manuell, um zusätzliche Module zu integrieren, die ich brauche, sodass ich nicht die verschiedenen Extras bekomme, die in der gepackten Version enthalten sind, wie z. B. die PID-Verwaltung.

/path/to/log/access-http.log /path/to/log/access-https.log /path/to/log/api.log /path/to/log/error.log {
    daily
    missingok
    notifempty
    create 664 nobody tim
    dateext
    dateformat -%Y-%m-%d
    dateyesterday
    rotate 10
    su tim tim
    postrotate
        /usr/local/bin/openresty -s reload
    endscript
}

Ich denke, das ist für jeden nützlich, der eine große Nginx-Konfiguration hat, die sowohl Webseiten als auch eine API bedient. Ich halte das HTTP getrennt, da ich keine Nicht-HTTPS-Seiten bediene und es den Script-Kiddie-Mist aus meinen Seitenprotokollen fernhält.

Antwort1

Legen Sie einfach eine Cron-Aufgabe für eine Minute vor Mitternacht fest, um die Protokolldatei zu verschieben, sie mit dem Datum umzubenennen und dann ein USR1-Signal an Nginx zu senden. Dadurch wird Nginx dazu veranlasst, die Protokolldateien erneut zu öffnen und eine neue für den nächsten Tag zu erstellen.

59 23 * * * mv /var/log/nginx/access.log /var/log/nginx/$(date +%F).access.log && kill -USR1 $(cat /run/nginx.pid)

verwandte Informationen