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

StackOverflow https://stackoverflow.com/questions/83741

質問

多数の HP-UX サーバーに分散された複数のテキスト ログ ファイルを監視する簡単な方法が必要です。これらは、いくつかの分散レガシー システムからのテキスト ログ ファイルと XML ログ ファイルが混在したものです。現在、サーバーに ssh 接続して使用しています。 尾部 -f そして grep, ただし、追跡するログが多数ある場合、これは拡張できません。

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

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

この方法で実装する場合、どのログ形式に変換すればよいですか?

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

役に立ちましたか?

解決

オプション:

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

他のヒント

おそらく、リアルタイムのログ監視のための最も軽量なソリューションは、次のようなものを使用することです。 ダンサーの甲羅 tail -f を使用した同時モード:

dsh -Mac -- tail -f /var/log/apache/*.log
  • -a は、~/.dsh/machines.list で定義したすべてのマシン名を表します。
  • -c は tail を同時に実行するためのものです
  • -M を指定すると、出力の各行の先頭にホスト名が追加されます。

以下のような単純なシェル スクリプトを使用します。もちろん、さまざまなファイル名を通知し、どのボックスを検索するかを決定するには、多少調整する必要がありますが、基本的なアイデアは理解できました。私たちの場合、複数のボックスの同じ場所にファイルを追跡しています。これには、パスワードを入力する代わりに、保存されたキーによる 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で殺すことができないというコメントについては、上記を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

ログスケープ - 値札のない Splunk のようなもの

マルチテールまたは

"チップ システム管理者および開発者向けのローカルおよびリモートのログ解析および監視ツールです。
これは、swatch、tee、tail、grep、ccze、mail の機能を 1 つにまとめており、いくつかの追加機能も備えています。」

例えば。

chip -f -m0 = 'run' -s0 = 'red' -m1 = ' : '/var/log/log1/var/log/log2/var/log/log3' '| egrep "run | ==> /"

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

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

Awstats は、複数の Apache ログ ファイルをマージできる Perl スクリプトを提供します。このスクリプトは、メモリ フットプリントが非常に低く、ログ ファイルがメモリに読み込まれることがないため、適切に拡張できます。これがあなたが必要とするものではないことは承知していますが、おそらくこのスクリプトから始めて、ニーズに合わせて調整することができます。

Chainsaw で利用可能なさまざまなレシーバー (ssh 経由でファイルを追跡する VFSLogFilePatternReceiver、SocketReceiver、UDPReceiver、CustomSQLDBReceiver など) を使用し、デフォルトのタブ識別子を変更するか、次のオプションを指定して「カスタム式ログパネル」を作成することで、ログを 1 つのタブに集約できます。さまざまなソース タブのイベントに一致する式。

gltail - Ruby、SSH、OpenGL を使用した複数のサーバーからのサーバー トラフィック、イベント、統計のリアルタイム視覚化

XpoLog Java用

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top