Surveiller en continu les bûches dont la queue est parfois tournée

21

Nous utilisons tail pour surveiller en continu plusieurs journaux, mais lorsqu'un journal tourne, la queue de ce fichier cesse.

Pour autant que je sache, le problème est que lorsque le journal est tourné, un nouveau fichier est créé et le processus de queue en cours ne sait rien de ce nouveau descripteur de fichier.

xkcd150
la source

Réponses:

34

Ah, il y a un drapeau pour ça.

au lieu d'utiliser, tail -f /var/log/filenous devrions utilisertail -F /var/log/file


tail -Fse traduit par tail --follow=name --retrycomme dans;

  • --follow=name: suivre le nom du fichier au lieu du descripteur de fichier
  • --retry: si le fichier est inaccessible, réessayez plus tard au lieu de mourir
xkcd150
la source
Pourquoi auraient-ils même l'option "-f"? Ce devrait être la valeur par défaut!
Dominic Cerisano
27
# tail --follow=mylog.log

De la queue de l'homme :

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.

Donc, dans ce cas, l'utilisation de l' -Foption serait correcte.

-F     same as --follow=name --retry
djhowell
la source
11

La réponse exacte dépend de votre système d'exploitation - mais dans de nombreux cas, tail -Ffera la bonne chose.

Jim Zajkowski
la source
3
Si tail -F ne fonctionne pas, compilez une version de tail -F qui fonctionne. L'autre alternative est un court chemin vers une ville folle.
chris
5

queue -F ou queue --follow = nom

retracile
la source
2

À mon humble avis, il est un peu étrange de modifier votre fichier journal par taille plutôt que par date. La plupart des journaux système (sous unix ou linux) tournent sur une base hebdomadaire ou mensuelle, et non en fonction de la taille ... C'est quelque chose que j'aime pour diverses raisons, et aussi quelque chose qui, s'il était implémenté, résoudrait votre problème.

Huit ans plus tard, je ne sais pas de quoi je parlais ici: il y a des tonnes d'endroits où vous voulez faire une rotation par taille, car les rotations quotidiennes / hebdomadaires / mensuelles peuvent générer des fichiers MASSIVE qui peuvent causer de graves problèmes.

D'un point de vue plus expérimenté, la vraie question est de savoir pourquoi vous voudriez vous asseoir et suivre en continu un fichier qui grandit si vite que vous le faites tourner plus que quotidiennement ... Ce serait comme regarder le flux Matrix.

De nos jours, vous feriez mieux de rechercher une agrégation de journaux de Big Data comme Splunk ou Sumologic, où elle peut filtrer les événements de journal en classes et se déclencher en fonction de valeurs de journal spécifiques ... Plus besoin de regarder les journaux en direct.

Satanicpuppy
la source
Je suis d'accord et c'est une chose sur laquelle j'ai réalisé que je devais me pencher. Espérons que log4j le supporte. Merci!
DivideByHero
1
Un avantage évident de la rotation par taille est que vous pouvez être sûr que l'ensemble des journaux sera inférieur à une taille connue.
Jim Zajkowski
1

J'utilise la commande sur mon serveur de production:

tail --follow var/log/apache-access_log --retry
womble
la source
-1

En outre, il peut être un peu trop lourd pour vos besoins, mais Splunk a une fonction de queue pour faire exactement ce que vous voulez. C'est gratuit jusqu'à 500 Mo / jour, mais si vos données dépassent cette taille, cela n'en vaut pas la peine.

thepocketwade
la source