web-dev-qa-db-ja.com

複数のファイルをテールし、出力をgrepします

いくつかのプロセスによって絶えず更新されている複数のログファイルからパターンをgrepし、このgrepの出力を継続的に調整したいと思います。以下のコマンドは機能せず、

  • テール:警告:標準入力に無期限に従うことは効果がありません
tail -f  | grep --line-buffered "Search this: " /var/links/proc2/id/myprocess*/Daily/myprocess*.log

誰かがこれを整理するのを手伝ってもらえますか?

12
212

multitail ツール(Sudo apt-get install multitailを使用してインストール)を確認する必要があります

つまり、マルチテールでは、すべての出力を1か所で表示するために--mergeallフラグを使用する必要があります

multitail --mergeall /var/links/proc2/id/myprocess*/Daily/myprocess*.log  | grep --line-buffered "Search this: " 

Grepを使用せずに同じことを行うことができます

multitail -E "Search this: " --mergeall /var/links/proc2/id/myprocess*/Daily/myprocess*.log  

マルチテールを使用して出力を個別に表示するには、これによりファイル名も表示されます

multitail -E "Search this: " /var/links/proc2/id/myprocess*/Daily/myprocess*.log 
11
mu 無

間違いは、ファイルをテールではなくgrepコマンドに渡すことです。

tail -fは、ファイルを入力として取得する必要があります。試してください:

tail -f  /var/links/proc2/id/myprocess*/Daily/myprocess*.log | grep --line-buffered "Search this: "

ファイル名も取得するには(ただし、grep出力のようにはなりません):

tail /var/links/proc2/id/myprocess*/Daily/myprocess*.log | grep --line-buffered -e'^==> .* <==$' -e'Search this: '
7
Udy

これは興味深い質問であり、簡単な答えは次のようになります。プレフィックススイッチをtailとともに使用しますが、残念ながら、これは現在、tailのほとんどのバージョンで実装されていません。

私が見ているように、2つのオプションがあります:標準ツールをタスクに適合させる( Udys回答 を参照)またはお気に入りのスクリプト/プログラミング言語を使用した独自のツール。

以下は、PerlFile::Tail::Multiモジュールを使用して実行できる1つの方法です。 CPAN(cpan -i File::Tail::Multi)からモジュールをインストールする必要があるかもしれないことに注意してください。

次のスクリプトを保存します。例: mtailを実行可能パスに移動し、スクリプトを実行可能にします。

#!/usr/bin/env Perl

use File::Tail::Multi;

$| = 1;  # Enable autoflush

$tail = File::Tail::Multi->new(RemoveDuplicate => 0,
                               OutputPrefix    => 'f',
                               Files           => \@ARGV);

while(1) { $tail->read; $tail->print; sleep 2 }

フルパスプレフィックスが必要な場合は、OutputPrefix'p'に変更します。

次のように実行します。

mtail /var/links/proc2/id/myprocess*/Daily/myprocess*.log | grep --line-buffered "Search this: "

grepが最後のコマンドである場合、--line-bufferedを指定する必要はないため、これで十分です。

mtail /var/links/proc2/id/myprocess*/Daily/myprocess*.log | grep "Search this: "
1
Thor