2013-11-23 3 views
31

Wir verwenden Logrotate und es läuft täglich ... jetzt hatten wir einige Situationen, in denen Logs deutlich gewachsen sind (sprich: Gigbaytes) und unseren Server zu töten. So, jetzt möchten wir eine maximale Dateigröße zu den Protokollen festlegen ....Centos/Linux Einstellung logrotate auf maximale Dateigröße für alle Logs

kann ich das nur zur logrotate.conf hinzufügen?

Größe 50M

und würde es dann für alle Protokolldateien anwenden? Oder muss ich dies pro Protokoll festlegen?

Oder ein anderer Ratschlag?

(ps. Ich verstehe, dass, wenn Sie benachrichtigt werden möchten, das Protokoll wie beschrieben wächst und was wir tun wollen, ist nicht ideal - aber es ist besser als nicht mehr anmelden können, weil kein Platz verfügbar ist)

dank, Sean

Antwort

37

Es gibt die Größe der Protokolldatei Rotation auszulösen. Beispiel: size 50M löst eine Protokollrotation aus, sobald die Datei mindestens 50 MB groß ist. Sie können das Suffix M für Megabyte, k für Kilobyte und G für Gigabyte verwenden. Wenn kein Suffix verwendet wird, wird es Bytes bedeuten. Sie können das Beispiel am Ende überprüfen. Es sind drei Direktiven verfügbar: size, maxsize und minsize. Nach manpage:

minsize size 
       Log files are rotated when they grow bigger than size bytes, 
       but not before the additionally specified time interval (daily, 
       weekly, monthly, or yearly). The related size option is simi- 
       lar except that it is mutually exclusive with the time interval 
       options, and it causes log files to be rotated without regard 
       for the last rotation time. When minsize is used, both the 
       size and timestamp of a log file are considered. 

size size 
       Log files are rotated only if they grow bigger then size bytes. 
       If size is followed by k, the size is assumed to be in kilo- 
       bytes. If the M is used, the size is in megabytes, and if G is 
       used, the size is in gigabytes. So size 100, size 100k, size 
       100M and size 100G are all valid. 
maxsize size 
       Log files are rotated when they grow bigger than size bytes even before 
       the additionally specified time interval (daily, weekly, monthly, 
       or yearly). The related size option is similar except that it 
       is mutually exclusive with the time interval options, and it causes 
       log files to be rotated without regard for the last rotation time. 
       When maxsize is used, both the size and timestamp of a log file are     
       considered. 

Hier ist ein Beispiel:

"/var/log/httpd/access.log" /var/log/httpd/error.log { 
      rotate 5 
      mail [email protected] 
      size 100k 
      sharedscripts 
      postrotate 
       /usr/bin/killall -HUP httpd 
      endscript 
     } 

Hier ist eine Erklärung für beide Dateien /var/log/httpd/access.log und /var/log/httpd/error.log. Sie werden rotiert, wenn sie über 100 KB groß werden, und die alten Protokolldateien werden nach der Durchführung von 5 Rotationen an [email protected] gesendet (unkomprimiert) und nicht entfernt. Die sharedscripts bedeutet, dass das Postrotate-Skript nur einmal ausgeführt wird (nachdem die alten Protokolle komprimiert wurden), nicht einmal für jedes Protokoll, das rotiert wird. Beachten Sie, dass das doppelte Anführungszeichen um den ersten Dateinamen zu Beginn dieses Abschnitts es logrotate ermöglicht, Protokolle mit Leerzeichen im Namen zu rotieren. Es gelten normale Shell-Anführungsregeln, wobei , und \ Zeichen unterstützt werden.

+1

Schön. Eine kleine Anmerkung, ich entdeckte, dass maxsize und minsize nicht gut mit alten Distributionen funktioniert (wie Centos5 und Ubuntu 10.10 ... Letzteres ist sowieso EOL). – tobixen

0

Ich habe das nie als globale Option verwendet, aber eine Möglichkeit, es zu testen, ist die Verwendung des Flags -d. Dies wird keine Rotationen verarbeiten, aber es wird Ihnen sagen, was Logrotate tun würde.

Also habe ich das gerade jetzt mit dem Flag -d getestet. Meine Erfahrungen scheinen gegen die Manpage zu gehen. Wenn ich eine "Größe 10" festlege, die sich drehen würde, wenn eine Protokolldatei größer als 10 Byte wäre, aber auch die Rotation auf wöchentlich festlegen würde, würde sie die Datei nicht drehen, selbst wenn sie größer als 10 Byte ist. Wenn ich den Parameter 'weekly' auskommentiere, zeigt logrotate an, dass er die Datei dreht. Das scheint im Gegensatz zu dem zu stehen, was ich von der Manpage erwartet habe.

+0

Warum? Lesen von Manpage-Extrakt von @Zeeshan Ich würde genau dieses Verhalten erwarten ... ("Minsize: ... Log-Dateien werden rotiert, wenn sie größer werden als Größe Bytes, aber * nicht * vor dem zusätzlich angegebenen Zeitintervall ...") – MarcoS

49

Wie bereits erwähnt, sind die Logrotate-Optionen size, minsize, maxsize die Auslöser für die Rotation.

Um es besser zu erklären. Sie können logrotate so oft ausführen, wie Sie möchten. Wenn jedoch kein Schwellenwert erreicht wird, z. B. wenn die Dateigröße erreicht oder die entsprechende Zeit verstrichen ist, werden die Protokolle nicht rotiert.

Die Größenoptionen stellen nicht sicher, dass Ihre gedrehten Protokolle auch die angegebene Größe haben. Um sie in die Nähe der angegebenen Größe zu bringen, müssen Sie das logrotate-Programm ausreichend oft aufrufen. Dies ist kritisch.

Für Protokolldateien, die sehr schnell aufgebaut werden (z. B. in den Hunderten von MB pro Tag), außer Sie möchten, dass sie sehr groß sind, müssen Sie sicherstellen, dass logrotate oft aufgerufen wird! Das ist kritisch.

Um zu verhindern, dass Ihre Festplatte mit mehreren Gigabyte großen Protokolldateien gefüllt wird, müssen Sie sicherstellen, dass logrotate oft genug aufgerufen wird, da sonst die Protokollrotation nicht so gut funktioniert, wie Sie möchten.

auf Ubuntu, können Sie leicht zu stündlichen Rotation wechseln, indem Sie das Skript /etc/cron.daily/logrotate bewegen

/etc/cron.hourly/logrotate Oder fügen

*/5 * * * * /etc/cron.daily/logrotate 

Um Ihre/etc/crontab-Datei. Um es alle 5 Minuten zu laufen.

Die Option size ignoriert die täglichen, wöchentlichen und monatlichen Zeitoptionen. Aber minsize & maxsize berücksichtigen.

Die Manpage ist dort ein wenig verwirrend. Hier ist meine Erklärung.

minsize rotiert nur, wenn die Datei eine angemessene Größe erreicht hat und der eingestellte Zeitraum abgelaufen ist. z.B. minsize 50MB + täglich Wenn die Datei 50 MB erreicht, bevor die tägliche Zeit abgelaufen ist, wird sie bis zum nächsten Tag weiter wachsen.

maxsize rotieren, wenn das Protokoll eine festgelegte Größe erreicht oder die entsprechende Zeit verstrichen ist. z.B. maxsize 50MB + täglich. Wenn die Datei 50 MB groß ist und wir noch nicht am nächsten Tag sind, wird das Protokoll rotiert. Wenn die Datei nur 20 MB groß ist und wir zum nächsten Tag wechseln, wird die Datei gedreht.

size wird rotieren, wenn das Protokoll> Größe. Unabhängig davon, ob stündlich/täglich/wöchentlich/monatlich angegeben wird. Wenn Sie also Größe 100M haben, bedeutet dies, dass Ihre Protokolldatei rotiert wird, wenn Ihre Protokolldatei> 100M ist, wenn logrotate ausgeführt wird, wenn diese Bedingung erfüllt ist. Sobald es gedreht ist, wird das Hauptprotokoll 0, und ein nachfolgender Lauf wird nichts tun.

Also im Fall des op. Specficially 50MB max würde ich so etwas wie die folgenden verwenden:

/var/log/logpath/*.log { 
    maxsize 50M 
    hourly 
    missingok 
    rotate 8 
    compress 
    notifempty 
    nocreate 
} 

Was bedeutet, dass er 8 Stunden von Protokollen max schaffen würde. Und es würde 8 von ihnen bei nicht mehr als 50MB geben. Da er sagt, dass er jeden Tag mehrere Gigabyte bekommt und davon ausgeht, dass sie sich mit einer ziemlich konstanten Rate aufbauen, und Maxize verwendet wird, wird er ungefähr bei dem Maximum liegen, das für jede Datei erreicht wird. Also werden sie wahrscheinlich jeweils knapp 50 MB groß sein. Angesichts des Volumens, das sie erstellen, müsste er sicherstellen, dass Logrotate oft genug ausgeführt wird, um die Zielgröße zu erreichen.

Da ich stündlich dort gesetzt habe, müssten wir Logrotate mindestens jede Stunde laufen lassen. Aber da sie sich auf 2 Gigabytes pro Tag einstellen und wir 50MB wollen ...unter der Annahme einer konstanten Rate von 83 MB pro Stunde. Sie können sich also vorstellen, wenn wir jede Stunde logrotate ausführen, obwohl wir die maximale Größe auf 50 setzen, werden wir in diesem Fall 83MB Logs haben. In diesem Fall sollte der Lauf alle 30 Minuten oder weniger ausgeführt werden.

Sicherstellen, dass Logrotate alle 30 Minuten ausgeführt wird.

*/30 * * * * /etc/cron.daily/logrotate 
+0

können Sie mehr über "Die Option Größe ignoriert die täglichen, wöchentlichen, monatlichen Zeitoptionen" erklären. – Jisson

+0

ist es fast das gleiche wie maxsize? – Jisson

+0

Ok, Erklärung für die Größe hinzugefügt – Matt