Monitoree continuamente los registros con la cola que ocasionalmente gira

21

Estamos usando tail para monitorear continuamente varios registros, pero cuando se gira un registro, la cola de ese archivo cesará.

Según tengo entendido, el problema es que cuando se gira el registro, se crea un nuevo archivo, y el proceso final en ejecución no sabe nada sobre ese nuevo identificador de archivo.

xkcd150
fuente

Respuestas:

34

Ah, hay una bandera para esto.

en lugar de usar tail -f /var/log/filedeberíamos estar usandotail -F /var/log/file


tail -Fse traduce tail --follow=name --retrycomo en;

  • --follow=name: siga el nombre del archivo en lugar del descriptor de archivo
  • --retry: si no se puede acceder al archivo, intente nuevamente más tarde en lugar de morir
xkcd150
fuente
¿Por qué tendrían incluso la opción "-f"? ¡Esto debería ser el predeterminado!
Dominic Cerisano
27
# tail --follow=mylog.log

De la cola del hombre :

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.

Entonces, en este caso, usar la -Fopción sería correcto.

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

La respuesta exacta depende de su sistema operativo, pero en muchos casos, tail -Fhará lo correcto.

Jim Zajkowski
fuente
3
Si tail -F no funciona, compile una versión de tail -F que sí lo haga. La otra alternativa es un camino corto a la ciudad loca.
Chris
5

tail -F o tail --follow = nombre

retroceder
fuente
2

En mi humilde opinión, es un poco extraño cambiar su archivo de registro por TAMAÑO en lugar de por fecha. La mayoría de los registros del sistema (en Unix o Linux) rotan semanalmente o mensualmente, y no en función del tamaño ... Esto es algo que me gusta por varias razones, y también algo que, si se implementa, resolvería su problema.

Ocho años después, no sé de qué demonios estaba hablando aquí: hay toneladas de lugares donde desea rotar por tamaño, porque las rotaciones diarias / semanales / mensuales pueden producir archivos MASIVOS que pueden causar problemas graves.

Desde una perspectiva más experimentada, la verdadera pregunta es por qué querrías sentarte y seguir continuamente un archivo que está creciendo tan rápido que lo estás rotando más que a diario ... Sería como ver la transmisión de Matrix.

En estos días, sería mejor investigar algunos agregados de registros de datos grandes como Splunk o Sumologic, donde puede filtrar eventos de registro en clases y disparar en función de valores de registro específicos ... No es necesario mirar registros en vivo.

Satanicpuppy
fuente
Estoy de acuerdo y esta es una cosa que me di cuenta de que debería investigar. Esperemos que log4j lo soporte. ¡Gracias!
DivideByHero
1
Una clara ventaja de la rotación por tamaño es que puede estar seguro de que todo el conjunto de registros será inferior a un tamaño conocido.
Jim Zajkowski
1

Yo uso el comando en mi servidor de producción:

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

Además, puede ser demasiado pesado para sus propósitos, pero splunk tiene una función de cola para hacer exactamente lo que desea. Es gratis por hasta 500 MB / día, pero si sus datos superan ese tamaño, no valdría la pena el costo.

thepocketwade
fuente