web-dev-qa-db-ja.com

複数のサーバーから複数のログファイルを集約する最良の方法

複数のHP-UXサーバーに分散された複数のテキストログファイルを監視する簡単な方法が必要です。それらは、いくつかの分散型レガシーシステムからのテキストとXMLログファイルの混合です。現在、サーバーにSSHで接続し、tail -fgrepを使用していますですが、追跡するログが多い場合はスケーリングされません。

ログはさまざまな形式であり、フォルダー内のファイル(特定のサイズに達すると自動的にローテーションされる)だけなので、リモートで収集し、それぞれを異なる方法で解析する必要があります。

私の最初の考えは、各ファイルタイプのカスタムファイルリーダーを使用して各サーバーで実行できるシンプルなデーモンプロセスを作成し、ソケットを介してネットワーク経由でエクスポートできる一般的な形式に解析することでした。ローカルで実行されている別のビューアプログラムがこれらのソケットに接続し、解析されたログをいくつかの単純なタブ付きGUIに表示するか、コンソールに集約します。

この方法で実装する場合、どのログ形式に変換する必要がありますか?

他にもっと簡単な方法はありますか? Chainsaw で使用するためにログファイルをlog4j形式に変換する必要がありますか、それともリモートソケットに接続できるより優れたログビューアがありますか? 別のログ質問 で提案されているように、 BareTail を使用できますか?これは 大規模分散システム ではなく、すべてのアプリケーションの現在のロギング実装を変更して、UDPブロードキャストを使用したり、JMSキューにメッセージを書き込んだりすることはできません。

40
Claes Mogren

オプション:

  1. SocketAppenderを使用して、すべてのログを1つのサーバーに直接送信します。 (これにより、サーバーのパフォーマンスが低下し、単一障害点が追加される可能性があります。)
  2. スクリプトを使用してデータを集計します。 scp、ssh、および認証キーを使用して、スクリプトがログインプロンプトなしですべてのサーバーからデータを取得できるようにしています。

おそらく、リアルタイムのログ監視のための最も軽量なソリューションは、 Dancer's Shell をtail -fを使用して並行モードで使用することです。

dsh -Mac -- tail -f /var/log/Apache/*.log
  • -aは〜/ .dsh/machines.listで定義したすべてのマシン名用です
  • -cは、tailの同時実行用です
  • -Mは、出力のすべての行にホスト名を付加します。
21
mrm

以下のような単純なシェルスクリプトを使用します。明らかに、さまざまなファイル名について通知し、どのボックスを検索するかを決定するために多少調整する必要がありますが、基本的なアイデアは得られます。私たちのケースでは、複数のボックスの同じ場所にファイルをテーリングしています。これには、パスワードを入力する代わりに、保存されたキーを介したssh認証が必要です。

#!/bin/bash
FILE=$1
for box in box1.foo.com box2.foo.com box3.foo.com box4.foo.com; do
     ssh $box tail -f $FILE &
done

^ Cでテーリングを削除できないというMike Funkのコメントに関して、私はmultitails.shと呼ばれるファイルに上記を保存し、その末尾に以下を追加しました。これにより、テーリングが完了したときに実行するkill_multitails.shファイルが作成され、それ自体が削除されます。

# create a bash script to kill off 
# all the tails when you're done
# run kill_multitails.sh when you're finished

echo '#!/bin/sh' > kill_multitails.sh
chmod 755 kill_multitails.sh
echo "$(ps -awx | grep $FILE)" > kill_multitails_ids
Perl -pi -e 's/^(\d+).*/kill -9 $1/g' kill_multitails_ids
cat kill_multitails_ids >> kill_multitails.sh
echo "echo 'running ps for it'" >> kill_multitails.sh
echo "ps -awx | grep $FILE" >> kill_multitails.sh
echo "rm kill_multitails.sh" >> kill_multitails.sh
rm kill_multitails_ids


wait
12
masukomi

Logscape -価格タグのないsplunkのような

5
JzJ

私はまさにこの目的のためにvsConsoleを作成しました-ログファイルへの簡単なアクセス-そしてアプリの監視とバージョン追跡を追加しました。あなたがそれについてどう思うか知りたいです。 http://vs-console.appspot.com/

2
prule

multitail または

" chip は、システム管理者および開発者向けのローカルおよびリモートのログ解析および監視ツールです。
スウォッチ、ティー、テール、grep、ccze、およびメールの機能を、いくつかの追加機能でラップします。 "

例えば。

チップ-f -m0 = 'RUN' -s0 = 'red' -m1 = '。*' -s1 user1 @ remote_ip1: '/ var/log/log1/var/log/log2/var/log/log3 user2 @ remote_ip2 : '/ var/log/log1/var/log/log2/var/log/log3' '| egrep "RUN | ==> /"

これにより、-m0パターンの発生が赤で強調表示され、すべてのログファイルから「RUN | ==> /」パターンが事前にフィルタリングされます。

2
Joao Figueiredo

チェーンソーで使用できるさまざまなレシーバー(ssh、SocketReceiver、UDPReceiver、CustomSQLDBReceiverなどを介してファイルをテールするVFSLogFilePatternReceiver)を使用し、デフォルトのタブ識別子を変更するか、提供することによって「カスタム式ログパネル」を作成することにより、ログを単一のタブに集約できます。さまざまなソースタブのイベントに一致する式。

1
Scott

XpoLog for Java

1
tom

gltail-複数のサーバーからのRuby、SSH、OpenGLによるサーバートラフィック、イベント、統計のリアルタイム可視化

1
Albert T. Wong

Awstatsは、複数のApacheログファイルをマージできるPerlスクリプトを提供します。このスクリプトは、メモリフットプリントが非常に小さいため、適切にスケーリングされ、ログファイルがメモリに読み込まれることはありません。私はそれがあなたが必要としているものと正確に同じではないことを知っていますが、おそらくあなたはこのスクリプトから始めて、それをあなたのニーズに適応させることができます。

1