複数のサーバーから複数のログ ファイルを集約する最良の方法 [終了]
-
01-07-2019 - |
質問
多数の HP-UX サーバーに分散された複数のテキスト ログ ファイルを監視する簡単な方法が必要です。これらは、いくつかの分散レガシー システムからのテキスト ログ ファイルと XML ログ ファイルが混在したものです。現在、サーバーに ssh 接続して使用しています。 尾部 -f そして grep, ただし、追跡するログが多数ある場合、これは拡張できません。
ログはさまざまな形式であり、フォルダー内の単なるファイルであるため(特定のサイズに達すると自動的にローテーションされます)、リモートでログを収集し、それぞれを異なる方法で解析する必要があります。
私の最初の考えは、ファイルタイプごとにカスタムファイルリーダーを使用して各サーバーで実行できる単純なデーモンプロセスを作成し、ソケットを介してネットワーク上にエクスポートできる共通形式に解析することでした。ローカルで実行されている別のビューア プログラムは、これらのソケットに接続し、解析されたログを単純なタブ付き GUI に表示するか、コンソールに集約して表示します。
この方法で実装する場合、どのログ形式に変換すればよいですか?
他にもっと簡単な方法はありますか?ログ ファイルを log4j 形式に変換して使用する必要がありますか? チェーンソー それともリモートソケットに接続できるより良いログビューアはあるのでしょうか?使ってもいいですか ベアテイル で提案されているように 別のログの質問?これは、 大規模分散システム また、すべてのアプリケーションの現在のロギング実装を変更して、UDP ブロードキャストを使用したり、メッセージを JMS キューに置くことはオプションではありません。
解決
オプション:
- SocketAppender を使用して、すべてのログを 1 つのサーバーに直接送信します。(これにより、パフォーマンスが著しく低下し、単一障害点が追加される可能性があります。)
- スクリプトを使用してデータを集約します。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用