it-swarm.com.de

Centos / Linux-Einstellung logrotate auf maximale Dateigröße für alle Protokolle

wir verwenden logrotate und es läuft täglich ... jetzt gab es einige Situationen, in denen die Protokolle erheblich gewachsen sind (sprich: gigbaytes) und unseren Server töteten. Deshalb möchten wir jetzt eine maximale Dateigröße für die Protokolle festlegen.

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

größe 50M

und würde es dann auf alle logdateien zutreffen? Oder muss ich dies pro Protokoll festlegen?

Oder irgendwelche anderen Ratschläge?

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

danke, Sean

57
snh_nl

Es gibt die Größe der Protokolldatei an, die die Rotation auslösen soll. Zum Beispiel löst size 50M Eine Protokollrotation aus, sobald die Datei 50 MB oder mehr 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, bedeutet dies Byte. Sie können das Beispiel am Ende überprüfen. Es stehen drei Direktiven zur Verfügung: size, maxsize und minsize. Laut 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 immer dann gedreht, wenn eine Größe von mehr als 100 KB erreicht wird, und die alten Protokolldateien werden nach 5 Umdrehungen an [email protected] Gesendet (nicht komprimiert), anstatt entfernt zu werden. Das sharedscripts bedeutet, dass das postrotate - Skript nur einmal ausgeführt wird (nachdem die alten Protokolle komprimiert wurden), nicht einmal für jedes Protokoll, das gedreht wird. Beachten Sie, dass die doppelten Anführungszeichen um den ersten Dateinamen am Anfang dieses Abschnitts es Logrotate ermöglichen, Protokolle mit Leerzeichen im Namen zu drehen. Es gelten die normalen Shell-Anführungsregeln, wobei die Zeichen , Und \ Unterstützt werden.

66
Zeeshan

Wie von Zeeshan erwähnt, sind die Logrotate-Optionen size, minsize, maxsize 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 ein Schwellenwert wie das Erreichen der Dateigröße oder der entsprechende Zeitraum nicht erreicht ist, werden die Protokolle nicht gedreht.

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 Programm logrotate ausreichend oft aufrufen. Das ist kritisch.

Für Protokolldateien, die sich sehr schnell aufbauen (z. B. in Hunderten von MB pro Tag), müssen Sie sicherstellen, dass Logrotate häufig aufgerufen wird, wenn Sie nicht möchten, dass sie sehr groß sind.

Um zu verhindern, dass sich Ihre Festplatte mit Multi-Gigabyte-Protokolldateien füllt, müssen Sie sicherstellen, dass logrotate häufig genug aufgerufen wird, da sonst die Protokollrotation nicht so funktioniert, wie Sie es möchten.

unter Ubuntu können Sie problemlos zur stündlichen Rotation wechseln, indem Sie das Skript /etc/cron.daily/logrotate nach /etc/cron.hourly/logrotate verschieben

Oder hinzufügen

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

In Ihre/etc/crontab-Datei. Alle 5 Minuten ausführen.

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

Die Manpage ist dort etwas verwirrend. Hier ist meine Erklärung.

minsize dreht sich nur, wenn die Datei eine angemessene Größe erreicht hat und die festgelegte Zeitspanne abgelaufen ist. z. Min. 50 MB + täglich Wenn die Datei 50 MB erreicht, bevor die tägliche Zeit abgelaufen ist, wächst sie bis zum nächsten Tag weiter.

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

size dreht sich, wenn die Protokollgröße> angegeben wird. Unabhängig davon, ob stündlich/täglich/wöchentlich/monatlich angegeben wird. Wenn Sie also eine Größe von 100 MB haben, bedeutet dies, dass bei einer Protokolldatei von> 100 MB das Protokoll gedreht wird, wenn logrotate ausgeführt wird, wenn diese Bedingung erfüllt ist. Sobald es gedreht ist, wird das Hauptprotokoll 0 sein und ein nachfolgender Lauf wird nichts tun.

Also im Fall der Operation. Speziell 50MB maximal würde ich so etwas wie das folgende verwenden:

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

Das heißt, er würde maximal 8 Stunden lang Protokolle erstellen. Und es würden 8 von ihnen mit jeweils nicht mehr als 50 MB sein. Da er angibt, jeden Tag mehrere Gigabyte zu haben und davon auszugehen, dass sie sich mit einer ziemlich konstanten Geschwindigkeit aufbauen und die maximale Größe verwendet wird, wird er am Ende ungefähr die maximale Größe für jede Datei erreichen. Sie werden also wahrscheinlich jeweils fast 50 MB groß sein. Angesichts des Volumens, das sie aufbauen, müsste er sicherstellen, dass die Logrotate häufig genug ausgeführt wird, um die Zielgröße zu erreichen.

Da ich stündlich dort eingesetzt habe, benötigen wir eine Logrotation, um mindestens jede Stunde ausgeführt zu werden. Aber da sie bis zu 2 Gigabyte pro Tag erreichen, möchten wir 50 MB ... bei einer konstanten Rate von 83 MB pro Stunde. Sie können sich also vorstellen, dass wir trotz der Einstellung von maxsize auf 50 stündlich eine Logrotation ausführen und in diesem Fall 83MB Logs erhalten. In diesem Fall sollte die Einstellung auf 30 Minuten oder weniger ausreichend sein.

Stellen Sie sicher, dass alle 30 Minuten eine Logrotation durchgeführt wird.

*/30 * * * * /etc/cron.daily/logrotate 
82
Matt