0

この問題の解決策を探しています。複数のマシンで実行されているアプリのログエントリをリモートサーバーに送信して集約する必要があります。要件:

  1. アプリへのログインは非同期である必要があります(ログエントリがネットワークを通過するのを待つことはできません)
  2. アプリへのログインはキューに入れる必要があります。ネットワークに障害が発生した場合、ログエントリはローカルでキューに入れられ、ネットワークが再び利用可能になったときに中央サーバーに送信される必要があります

log4jとJMSAppenderの使用を検討しています。それが適切な解決策であると仮定して、利用可能な例はありますか?このシナリオでログエントリを受信するために、集中型サーバーでどのようなプロセスが実行されますか?

ありがとう。

4

1 に答える 1

1

私が考えるようになった簡単なセットアップの 1 つは、Apache ActiveMQを使用することです。

これは、複数の物理マシン間でキューをクラスター化できるオープン ソースのメッセージング ブローカー (JMS 互換) であり、ActiveMQ のインストールはかなり軽量です。各アプリケーション マシンに 1 つの ActiveMQ をインストールするだけです。次に、ロギング サーバー (図の物理サーバー C) に、別の ActiveMQ があります。アプリケーションは JMS アペンダー (詳細はこちら) を使用し、実際には付属のapache camelを使用してキューから読み取り、ファイルまたはデータベースにログを書き込むことができます。そのタスク用のアプリケーションを作成する必要はありません。

次のようなものを activemq /conf インストールの camel.xml に追加し、activemq.xml 構成に camel.xml をインポートするのと同じくらい簡単です。

<route>
 <from uri="activemq:queue:LogQueue"/>
 <to uri="file:target/folder/?fileName=logfile.log&fileExist=Append"/>
</route>

分散ロギングの例

無数の他のフレームワーク、JMS サーバー、およびテクノロジを使用できますが、これは非常に低コストで高い安定性を達成するためのかなり簡単なアプローチだと思います。

于 2012-06-15T20:05:00.283 に答える