Kontinuierliche Überwachung von Protokollen mit gelegentlich gedrehtem Schwanz

21

Wir verwenden tail, um mehrere Protokolle fortlaufend zu überwachen, aber wenn ein Protokoll gedreht wird, hört das Tail für diese Datei auf.

Soweit ich weiß, liegt das Problem darin, dass beim Drehen des Protokolls eine neue Datei erstellt wird und der laufende Tail-Prozess nichts über dieses neue Dateihandle weiß.

xkcd150
quelle

Antworten:

34

Ah, dafür gibt es eine Flagge.

anstatt zu verwenden tail -f /var/log/file, sollten wir verwendentail -F /var/log/file


tail -Fübersetzt tail --follow=name --retrywie in;

  • --follow=name: Verfolgen Sie den Namen der Datei anstelle des Dateideskriptors
  • --retry: Wenn auf die Datei nicht zugegriffen werden kann, versuchen Sie es später erneut, anstatt zu sterben
xkcd150
quelle
Warum sollten sie überhaupt die Option "-f" haben? Dies sollte die Standardeinstellung sein!
Dominic Cerisano
27
# tail --follow=mylog.log

Vom mann schwanz :

With --follow (-f), tail defaults to  following  the  file  descriptor,
       which  means that even if a tail’ed file is renamed, tail will continue
       to track its end.  This default behavior  is  not  desirable  when  you
       really want to track the actual name of the file, not the file descrip‐
       tor (e.g., log rotation).  Use --follow=name in that case.  That causes
       tail  to track the named file by reopening it periodically to see if it
       has been removed and recreated by some other program.

In diesem Fall -Fwäre es also richtig , die Option zu verwenden.

-F     same as --follow=name --retry
djhowell
quelle
11

Die genaue Antwort hängt von Ihrem Betriebssystem ab - wird aber in vielen Fällen tail -Fdas Richtige tun.

Jim Zajkowski
quelle
3
Wenn tail -F nicht funktioniert, kompilieren Sie eine entsprechende Version von tail -F. Die andere Alternative ist ein kurzer Weg in die verrückte Stadt.
Chris
5

tail -F oder tail --follow = name

retracile
quelle
2

IMHO ist es ein wenig seltsam, Ihre Protokolldatei nach GRÖSSE anstatt nach Datum zu ändern. Die meisten Systemprotokolle (unter Unix oder Linux) werden wöchentlich oder monatlich und nicht nach Größe gewechselt. Dies ist etwas, das ich aus verschiedenen Gründen mag, und auch etwas, das, falls implementiert, Ihr Problem lösen würde.

Acht Jahre später weiß ich nicht, wovon zum Teufel ich hier sprach: Es gibt Unmengen von Stellen, an denen Sie nach Größe drehen möchten, da tägliche / wöchentliche / monatliche Rotationen zu MASSIVEN Dateien führen können, die schwerwiegende Probleme verursachen können.

Aus einer erfahreneren Perspektive ist die eigentliche Frage, warum Sie eine Datei, die so schnell wächst, dass Sie sie mehr als täglich drehen, in Ruhe verfolgen möchten. Es wäre, als würde man den Matrix-Stream von beobachten.

Heutzutage sollten Sie sich besser mit einer Big-Data-Protokollaggregation wie Splunk oder Sumologic befassen, bei der Protokollereignisse in Klassen gefiltert und basierend auf bestimmten Protokollwerten ausgelöst werden können ... Sie müssen überhaupt keine Live-Protokolle mehr anzeigen.

Satanicpuppy
quelle
Ich stimme zu und dies ist eine Sache, die ich mir ansehen sollte. Hoffentlich unterstützt es log4j. Vielen Dank!
DivideByHero
1
Ein klarer Vorteil der Rotation nach Größe ist, dass Sie sicher sein können, dass der gesamte Satz von Protokollen kleiner als eine bekannte Größe ist.
Jim Zajkowski
1

Ich verwende den Befehl auf meinem Produktionsserver:

tail --follow var/log/apache-access_log --retry
womble
quelle
-1

Für Ihre Zwecke ist es vielleicht etwas zu robust, aber Splunk verfügt über eine Tail-Funktion, mit der Sie genau das tun können, was Sie wollen. Es ist kostenlos für bis zu 500 MB / Tag, aber wenn Ihre Daten darüber hinausgehen, sind sie die Kosten nicht wert.

thepocketwade
quelle