Frage Überwachen Sie kontinuierlich Protokolle mit Schwanz, die gelegentlich gedreht werden


Wir verwenden das Tail, um mehrere Logs kontinuierlich zu überwachen, aber wenn ein Log gedreht wird, wird der Tail für diese Datei beendet.

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


20
2017-08-13 12:33


Ursprung




Antworten:


Ah, dafür gibt es eine Flagge.

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


tail -F wird übersetzt in tail --follow=name --retry wie in;

  • --follow=name: Folgen Sie dem Namen der Datei anstelle des Dateideskriptors
  • --retry: Wenn die Datei nicht zugänglich ist, versuchen Sie es später erneut, anstatt zu sterben

30
2017-08-13 12:39



Warum hätten sie überhaupt die Option "-f"? Dies sollte der Standard sein! - Dominic Cerisano


# tail --follow=mylog.log

Von 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.

Also in diesem Fall mit der -F Option wäre richtig.

-F     same as --follow=name --retry

27
2017-11-10 20:24



Ah ha! Es klappt! Vielen Dank! - DivideByHero


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


11
2017-11-10 20:22



Wenn tail -F nicht funktioniert, kompiliere eine Version von tail -F, die das tut. Die andere Alternative ist eine kurze Straße in die verrückte Stadt. - chris


Schwanz -F oder tail --follow = name


5
2017-08-13 12:38





Ich verwende den Befehl auf meinem Produktionsserver:

tail --follow var/log/apache-access_log --retry

1
2017-07-21 01:42





IMHO, ist es ein wenig seltsam, Ihre Protokolldatei nach Größe anstatt nach Datum zu ändern. Die meisten Systemprotokolle (in Unix oder Linux) rotieren auf wöchentlicher oder monatlicher Basis und nicht auf der Größe ... Das ist etwas, was ich aus verschiedenen Gründen mag, und auch etwas, das, wenn es implementiert wird, Ihr Problem lösen würde.

Acht Jahre später weiß ich nicht, worüber ich hier gesprochen habe: Es gibt Unmengen von Orten, an denen man sich nach Größe drehen möchte, da tägliche / wöchentliche / monatliche Rotationen zu MASSIVE-Dateien führen können, die ernsthafte Probleme verursachen können.

Aus einer eher erfahrenen Perspektive ist die eigentliche Frage, warum Sie eine Datei, die so schnell wächst, dass Sie sie mehr als täglich rotieren lassen möchten, ständig sitzen lassen wollen. Es wäre so, als würden Sie den Matrix-Stream beobachten.

In diesen Tagen sollten Sie besser in eine große Datenlog-Aggregation wie Splunk oder Sumologic schauen, wo sie Log-Ereignisse in Klassen filtern und basierend auf bestimmten Log-Werten triggern können ... Sie müssen keine Live-Logs ansehen.


0
2017-11-10 20:47



Ich stimme zu und das ist eine Sache, die mir klar geworden ist. Hoffentlich unterstützt log4j es. Vielen Dank! - DivideByHero
Ein klarer Vorteil der Rotation um die Größe ist, dass Sie sicher sein können, dass der gesamte Satz von Protokollen weniger als eine bekannte Größe ist. - Jim Zajkowski


Auch könnte es ein wenig zu schwer für Ihre Zwecke sein, aber Splunk hat eine Tail-Funktion, genau das zu tun, was Sie wollen. Es ist kostenlos für bis zu 500 MB / Tag, aber wenn Ihre Daten darüber hinaus sind, wäre es nicht die Kosten wert.


-1
2017-08-13 12:55