Cronolog vs logrotate


Antworten:


14

Nach meiner Erfahrung ist Logrotate großartig. Es ist sehr flexibel und funktioniert gut mit den meisten Softwareprogrammen.

Es gibt jedoch einige Probleme damit, und da cronolog in erster Linie eine Weblog-Rotationsfunktion ist, schreibe ich meine Erfahrungen mit logrotate + apache auf, die problematisch waren:

Beim Drehen von Protokollen müssen wir Apache benachrichtigen, dass ein Protokoll gedreht wird. Selbst wenn logrotate access.log in access.log.1 umbenennt, schreibt Apache weiterhin in access.log.1, während es in den Inode schreibt, und Das Umbenennen der Datei wirkt sich nicht auf die Inode-Nummer aus.

Beim Debian-Ätzen (und wahrscheinlich bei vielen anderen Distributionen) wird logrotate verwendet, um Apache-Protokolle zu drehen. Jetzt hat Apache einen ordnungsgemäßen Neustart , der den untergeordneten Apache-Prozessen empfiehlt, das Programm zu beenden, sobald sie die bestehenden Verbindungen beendet haben. Apache liest dann die Konfiguration erneut und erzeugt neue untergeordnete Prozesse, die in eine neue Protokolldatei schreiben (falls dies die vorherige war) gedreht).

Dies klingt nach einer großartigen Lösung, jedoch funktioniert ein ordnungsgemäßer Neustart unter bestimmten Bedingungen (wie z. B. hoher Last) nicht immer. Daher haben Debian-Entwickler beschlossen, in der Apache-Logrotate-Konfiguration einen Apache-Neustart anstelle eines ordnungsgemäßen Neustarts zu verwenden. Leider werden dadurch alle Verbindungen auf einmal getrennt, was für stark belastete Sites sehr schlecht ist. Darüber hinaus kann der Neustart von Apache auch Probleme wie das Stoppen und Nichtstarten von Apache verursachen (auch in bestimmten Ladesituationen). Weitere Informationen finden Sie unter den folgenden Fehlerlinks.

Unter dem Strich ist logrotate großartig, kann aber bei bestimmten Programmen zu bestimmten Problemen führen. Ich habe nicht viel Erfahrung mit Cronolog, aber da es Protokolle über eine Pipe schreibt, sind beim Rotieren von Protokolldateien keine Apache-Neuladungen erforderlich, wodurch im Grunde alles gelöst wird, was oben beschrieben wurde.

Verwandte logrotate / apache debian Fehler:

  1. Debian-Fehler # 301702
  2. Debian-Fehler # 400455

1
Die Lösung für das oben genannte ist, abgeschnitten zu verwenden! Sie kopieren den Inhalt von access.log nach access.log.1 und leeren dann das access.log (wie Sie sehen, bleibt der Inode von access_log unverändert). Normalerweise haben Sie keine Protokolle, die größer als ein paar GB sind (im schlimmsten Fall), sodass der gesamte Vorgang nicht lange dauert!
Nikolaidis Fotis

3

Ich bevorzuge Cronolog, aber es ist keine wirklich starke Präferenz.

logrotate, wo von cron gestartet wird, und wenn ein System aus irgendeinem Grund ausfällt, wenn das Drehen hätte stattfinden sollen, werden Ihre Protokolldateien nicht gedreht.

Ich mag es auch, wenn Protokolldateien das Datum (% Y% m.combined.access.log) im Namen haben, weil ich diese Protokolle für eine lange Zeit aufbewahre. Auf den meisten Systemen benennt Apache Logrotate standardmäßig die Dateien access.log, access.log.1 usw. Es ist möglicherweise möglich, ein Datum in den Protokolldateien mit logrotate zu verwenden, aber ich konnte beim letzten Mal nicht herausfinden, wie ich vorgehen soll.


2
Das Problem, bei dem logrotate nicht funktioniert, wenn die Cron-Zeit abgelaufen ist, kann durch Installieren des "anacron" -Pakets behoben werden.
andrewd18

oder noch besser, Sie können Ihre Protokolle im gewünschten Format speichern - dies kann mit Vorlagen in rsyslog erfolgen - (% Jahr% -% Monat% -% Tag% _lala.log). In diesem Fall müssen Sie nicht einmal die Protokolle drehen, da der Name jeden Tag geändert wird!
Nikolaidis Fotis

2

Nur Logrotate verwendet. Es ist das, was Debian standardmäßig verwendet und ich hatte noch nie Beschwerden damit.


2

Ich benutze fast ausschließlich cronologüber logrotate. logrotatekommt mit Debian, und ich erlaube es, weiterhin für die Systemdienste wie die Mailserver-Protokolle zu arbeiten. Aber für Apache- und lighttpdProtokolldateien ist alles cronolog.

Einer der Gründe, warum ich benutze, cronologist, dass die gesamte Konfiguration in der Protokolldateizeile der Webserverkonfiguration erfolgt

zB in eine lighttpdKonfigurationsdatei könnten Sie setzen:

accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%W-access.log"

Und alle erhalten jede Woche eine neue Protokolldatei ohne andere Konfiguration. Oder Sie könnten kreativ werden und etwas tun wie:

accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%m/%a-access.log"

Und erhalten Sie eine Protokolldatei, die den Datenverkehr nach Wochentag anzeigt. zB alle Sonntage, alle Dienstage.

Was besser ist, ist, dass selbst wenn der Server längere Zeit nicht verfügbar ist, beim Neustart die richtige Protokolldatei verwendet wird.


1
Das sieht sehr nach svlogd aus (von runit und daemontools).
Tobu
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.