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

73

Wir verwenden logrotate und es läuft täglich ... jetzt hatten wir einige Situationen, in denen die Protokolle erheblich gewachsen sind (sprich: Gigbaytes) und unseren Server getötet haben. Jetzt möchten wir eine maximale Dateigröße für die Protokolle festlegen.

Kann ich dies einfach zur logrotate.conf hinzufügen?

Größe 50M

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

Oder irgendeinen anderen Rat?

(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, als sich nicht mehr anmelden zu können, weil kein Speicherplatz verfügbar ist)

Danke, Sean

snh_nl
quelle

Antworten:

82

Es gibt die Größe der Protokolldatei an, die die Drehung auslösen soll. Beispielsweise size 50Mwird eine Protokollrotation ausgelöst, sobald die Datei mindestens 50 MB groß ist. Sie können das Suffix Mfür Megabyte, kKilobyte und GGigabyte verwenden. Wenn kein Suffix verwendet wird, bedeutet dies Bytes. Sie können das Beispiel am Ende überprüfen. Es gibt drei Richtlinien zur Verfügung size, maxsizeund 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.logund /var/log/httpd/error.log. Sie werden immer dann gedreht, wenn sie größer als 100.000 werden, und die alten Protokolldateien werden [email protected]nach 5 Umdrehungen per Post (unkomprimiert) gesendet, anstatt entfernt zu werden. Dies sharedscriptsbedeutet, dass das postrotateSkript nur einmal ausgeführt wird (nachdem die alten Protokolle komprimiert wurden), nicht einmal für jedes gedrehte Protokoll. 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 Regeln für Shell-Anführungszeichen mit ,und \Zeichen.

Zeeshan
quelle
2
Nett. Ein kleiner Hinweis: Ich habe festgestellt, dass Maxsize und Minsize mit alten Distributionen (wie Centos5 und Ubuntu 10.10 ... letzteres ist sowieso EOL) nicht gut funktionieren.
Tobixen
Ein wenig abseits des Themas, aber @tobixen ist richtig; maxsize wurde in Version 3.8.1 hinzugefügt . Um herauszufinden, welche Version Ihres Betriebssystems welche Version von logrotate hat, versuchen Sie es mit einer versionenspezifischen Manpage für Debian , Versionszuordnung und Gleichem für Centos .
TutuDajuju
102

Wie von Zeeshan erwähnt, die logrotate Optionen size, minsize, maxsizesind 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. die erreichte Dateigröße oder die entsprechende Zeit, werden die Protokolle nicht gedreht.

Die Größenoptionen stellen nicht sicher, dass Ihre gedrehten Protokolle auch die angegebene Größe haben. Damit sie nahe an der angegebenen Größe liegen, müssen Sie das logrotate-Programm ausreichend oft aufrufen. Dies ist kritisch.

Bei Protokolldateien, die sich sehr schnell aufbauen (z. B. in Hunderten von MB pro Tag), müssen Sie sicherstellen, dass logrotate häufig aufgerufen wird, es sei denn, Sie möchten, dass sie sehr groß sind! das ist kritisch.

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

Unter Ubuntu können Sie einfach 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 sizeOption ignoriert die täglichen, wöchentlichen und monatlichen Zeitoptionen. Aber Minsize & Maxsize berücksichtigen dies.

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

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

maxsizewird gedreht, wenn das Protokoll eine festgelegte Größe erreicht oder die entsprechende Zeit abgelaufen ist. zB maxsize 50MB + 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.

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

Also im Fall der Operation. Insbesondere maximal 50 MB würde ich Folgendes verwenden:

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

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

Da ich dort stündlich eingestellt habe, müssten wir mindestens jede Stunde logrotieren. Aber da sie sich auf 2 Gigabyte pro Tag aufbauen und wir 50 MB wollen ... unter der Annahme einer konstanten Rate von 83 MB pro Stunde. Sie können sich also vorstellen, dass wir in diesem Fall 83 MB Protokolle erhalten, wenn wir jede Stunde logrotate ausführen, obwohl die maximale Größe auf 50 eingestellt ist. In diesem Fall sollte die Ausführung auf alle 30 Minuten oder weniger ausreichen.

Stellen Sie sicher, dass die Protokollierung alle 30 Minuten ausgeführt wird.

*/30 * * * * /etc/cron.daily/logrotate 
Matt
quelle
Können Sie etwas mehr über "Die Größenoption ignoriert die täglichen, wöchentlichen und monatlichen Zeitoptionen" erklären.
Jisson
ist es fast dasselbe wie maxsize?
Jisson
Ok, Erklärung für Größe hinzugefügt
Matt
2
Danke für die Erklärung. Es ist viel besser als das Original in der Manpage.
Der Tran
2
Diese Antwort ist viel solider als die akzeptierte Antwort. Gute Arbeit!
Giacomo1968