持续监控带有偶尔旋转的尾巴的原木


21

我们正在使用tail来连续监视多个日志,但是当旋转日志时,该文件的tail将停止。

据我了解,问题在于,当旋转日志时,会创建一个新文件,并且运行中的tail进程对该新文件句柄一无所知。

Answers:


34

啊,有一个标志。

而不是使用tail -f /var/log/file我们应该使用tail -F /var/log/file


tail -F转换tail --follow=name --retry

  • --follow=name:跟随文件名而不是文件描述符
  • --retry:如果无法访问该文件,请稍后再试,而不要死

他们为什么还要使用“ -f”选项?这应该是默认值!
Dominic Cerisano

27
# tail --follow=mylog.log

人尾巴上

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.

因此,在这种情况下,使用该-F选项将是正确的。

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



2

恕我直言,按大小而不是按日期更改日志文件有点奇怪。大多数系统日志(在unix或linux中)都是每周或每月一次,而不是基于大小轮转。出于各种原因,我喜欢这个东西,而且如果实施,它也可以解决您的问题。

八年后的今天,我不知道我在说什么。在很多地方,您都希望按大小进行轮换,因为每天/每周/每月的轮换会产生MASSIVE文件,这可能会导致严重的问题。

从一个经验丰富的角度来看,真正的问题是为什么您要坐下来并连续拖尾一个增长得如此之快的文件,以至于您每天旋转的次数都更多……就像观看Matrix流一样。

如今,您最好研究一些大数据日志聚合,例如Splunk或Sumologic,它们可以将日志事件过滤到类中并根据特定的日志值触发...根本不需要观看实时日志。


我同意,这是我意识到应该研究的一件事。希望log4j支持它。谢谢!
DivideByHero

1
按大小轮换的一个明显优势是,您可以确保整个日志集将小于某个已知大小。
Jim Zajkowski 09年

1

我在生产服务器上使用命令:

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

-1

另外,对于您的目的而言,它可能有点过于繁重,但是splunk具有尾部功能,可以完全按照您的要求进行操作。它是免费的,每天最多可提供500 MB的空间,但是如果您的数据超出此大小,则不值得花这笔钱。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.