web-dev-qa-db-ja.com

時々回転する尾を持つログを継続的に監視する

いくつかのログを継続的に監視するためにテールを使用していますが、ログがローテーションされると、そのファイルのテールは停止します。

私が理解している限り、問題は、ログがローテーションされると、新しいファイルが作成され、実行中のテールプロセスがその新しいファイルハンドルについて何も認識しないことです。

21
xkcd150

ああ、これにはフラグがあります。

tail -f /var/log/fileを使用する代わりに、tail -F /var/log/fileを使用する必要があります


tail -Fは、次のようにtail --follow=name --retryに変換されます。

  • --follow=name:ファイル記述子の代わりにファイルの名前に従います
  • --retry:ファイルにアクセスできない場合は、死なずに後で再試行してください
34
xkcd150
# tail --follow=mylog.log

からman tail

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
27
djhowell

正確な答えはOSによって異なりますが、多くの場合、tail -Fは正しいことを行います。

11
Jim Zajkowski

tail -Fまたはtail --follow = name

5
retracile

私見、ログファイルを日付ではなくサイズで変更するのは少し奇妙です。ほとんどのシステムログ(UNIXまたはLinux)は、サイズに基づいてではなく、週単位または月単位でローテーションします...これは、さまざまな理由で私が気に入っているものであり、実装すると問題を解決できるものでもあります。

8年後、ここで何を話しているのかわかりません。サイズごとにローテーションしたい場所はたくさんあります。毎日/毎週/毎月のローテーションは重大な問題を引き起こす可能性のあるMASSIVEファイルを生成する可能性があるためです。

より経験豊富な観点から見ると、本当の問題は、毎日増え続けるほど速く成長しているファイルを座って継続的にテールしたい理由です...それは、マトリックスストリームを見ているようなものです。

最近では、SplunkやSumologicのようなビッグデータログの集約をよりよく調べる必要があります。SplunkやSumologicは、ログイベントをクラスにフィルタリングし、特定のログ値に基づいてトリガーできます...ライブログを監視する必要はまったくありません。

2
Satanicpuppy

本番サーバーでコマンドを使用します。

tail --follow var/log/Apache-access_log --retry
1
Webmaster