2012-05-31 14 views
5

以前作成したJava WebアプリケーションをAzureに移行する予定です。アプリケーションは、ローカルで作成されたファイルに保存されたアプリケーションレベルのログに以前にlog4jを使用していました。問題は、複数のインスタンスを持つAzureロールでは、これらのログを収集して集計し、仮想マシンのハードドライブではなく永続ストレージに格納する必要があることです。Azure Java Tomcatロギング

ロギングはアプリケーションの重要なコンポーネントですが、実際の作業を遅くしてはいけません。私は複数のオプションを検討してきましたが、ベストプラクティス、ストレージ時間と後の処理の両方でセキュリティ、ログの一貫性とパフォーマンスを考慮した最適なソリューションについては興味があります。

  • log4jをカスタムAppenderで使用して、Azure SQLに情報を格納します。
  • log4jをカスタムAppenderで使用して、Azureテーブルストレージに情報を格納します。
  • ローカルハードドライブから上記の永続ストレージのいずれかにデータを転送する追加のツールを作成します。

その他の方法がありますか、またはJavaのこの問題の完全な解決方法はありますか? 上記の基準の中で最も優れているものはどれですか?

答えて

1

最後に、Log4J Appenderを書き込むことにしました。診断情報を収集する必要はありませんでしたが、私の主な目標は、簡単に交換可能な方法でログファイルを収集することだけでした。私の最初の恐れは、アプリケーションを遅くすることだが、メモリに書き込むだけで、ログデータをAzureテーブルに定期的に書き出すだけで、あまりにも多くのAPI呼び出しを行うことなく、完全に動作する。ここで

は私の実装のための主な手順は次のとおりです。

まず私はcom.microsoft.windowsazure.services.table.client.TableServiceEntityを拡張LogEntity呼ばれるAzureのテーブルに格納されるエンティティクラスを作成しました。

次は、を含むorg.apache.log4j.AppenderSkeletonを拡張するアペンダーを書いています。

オーバーライドされたメソッドprotected void append(LoggingEvent event)からこのコレクションに追加した後、このリストを定期的に空にして、そのデータをAzureテーブルに書き込むスレッドを作成しました。

最後に、新しく作成したAppenderをlog4j構成ファイルに追加しました。

2

すぐに使用できるソリューションはありませんが、テーブルストレージ用のカスタムアペンダーは理にかなっています。診断ツール(perfカウンターなど)と同様の方法でログを照会できます。 。

唯一の考慮点は、大量のログ・ステートメント(1秒間に数百回など)を書く場合です。その金額で、毎月の請求書に表示される取引費用に気づくでしょう。 1万人あたり1ペニー、1秒あたり100ペンスで、あなたは1インスタンスあたり約250ドルを探しています。複数のインスタンスがある場合は、そこからコストが上がります。 SQL Azureを使用すると、トランザクションコストはかかりませんが、ストレージコストは高くなります。

ストレージ転送方法を使用する場合は、Windows Azure診断を設定してディレクトリを監視し、ファイルを定期的にBLOBストレージにアップロードできます。唯一の欠点は、Javaが診断の設定を直接サポートしていないことです。 Eclipseからプロジェクトをビルドする場合は、すべてを起動するスクリプトファイルしかないので、小さな.netアプリケーションを作成するか、AzureRunMeのようなものを使用する必要があります。 Javaアプリを起動するためのVisual Studioプロジェクトを構築している場合、別のアプリなしで診断を設定することができます。

Javaと診断プログラムのセットアップに関して、永続システムから公開されたblog postが公開されました。 この回答は、ライブであれば に更新されます。また、Cloud Ninja for Javaを見てください。これは、次回の記事で説明するように、診断を設定する外部の.net exeファイルを使用してTomcatログ(および関連する解析)を実装しています。

+0

編集に、もののアプリケーションログを向けてより多くのを参照しておりません別 。net appをEclipseアプリケーションからビルドするときにのみ使用します。これは.netスキャフォールディングコード(@ AvkashのWorkerRole.csへの参照)がありません。 –

+0

私はまだブログ記事を読むのを楽しみにしています! – hpityu

+0

リンクを追加するように編集しました。フォーマットエラーがありますが、今週はPersistentによって修正されています。 –

1

私のブログにアクセスしてドキュメントをダウンロードしてください。このドキュメントでは、エラーをログに記録するための「Tomcat Solution Diagnostics」の章を見つけることができます。この文書は長い間書かれていましたが、Tomcatで任意の種類のJavaベースのログ(log4j、sure)を生成し、直接表示するためにこのメソッドを使用できます。

第6章:Tomcatのソリューション診断

  • エラーログ
  • カスタムアプリケーションすなわちjava.exeを、PHPがありいずれのシナリオでは、ログファイル

http://blogs.msdn.com/b/avkashchauhan/archive/2010/10/29/windows-azure-tomcat-solution-accelerator-full-solution-document.aspx

を表示します。 exe、pythonなど、私は、 "ローカルストレージ"フォルダに直接ログファイルを作成して、Azure DiagnosticsをWorker Role(W orkerRole.cs)を使用して、これらのカスタムログファイルをAzure VMからAzure Blobストレージに直接エクスポートします。

here.

に記載されている方法は、ローカルストレージ上のカスタムログを作成するAzureの診断を使用してAzureのブロブにログを送信することは、その後uは説明している他の方法安いと堅牢だろう。

+0

Eclipseプロジェクトからデプロイする場合、WorkerRole.csはありません。ちょうど起動スクリプト。 –

+1

あなたができることはdiagnostics.wadcfgを作成し、タイマーと診断設定を構成し、役割ルートフォルダにドロップすることです。 Azureの役割が開始されると、ルートフォルダーにdiagnostics.wadcfgがあります。これにより、構成がロードされ、診断が開始されます。 – AvkashChauhan

+1

「Windows Azure診断設定ファイル」 - > http://msdn.microsoft.com/en-us/library/gg604918.aspxの使用方法に関するリンクはこちらです – AvkashChauhan

0

もう1つの代替案。

標準の方法(DailyRollingFileAppenderなど)でlog4jを使用し続けることはできません。ファイルはVM(IaaS)のUNCパス上に作成する必要があります。 このVMは、わずかなディスクスペースしか必要としませんが、処理能力はあまり必要ありません。そのため、利用可能なVMを共有したり、最小限の設定で、好ましくは同じ地域やクラウドサービスでVMを作成することができます。 RDP/FTPなどを経由して

蓄積されたログファイルにアクセスすることができ

1は、取引コストと特別のLog4jアペンダを開発する コストが発生しませんその方法...それは安価な代替として判明することができます。

おかげ ジーヴァン

PS:私は(Weblogicののカタリナ/マネージャの.logまたは.outファイル)アプリケーションサーバのログが必要な明確にする