5

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

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

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

他の方法はありますか、それともJavaのこの問題に対する完全な解決策はありますか?上記の基準を考慮すると、上記のどれが最適ですか?

4

4 に答える 4

2

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

唯一の考慮事項は、ログステートメントを大量に(1秒間に数百回など)書き込んでいるかどうかです。そのレートで、あなたは毎月の請求書に現れる取引費用に気づき始めるでしょう。10,000あたり1ペニー、1秒あたり100で、インスタンスあたり約250ドルを見ています。複数のインスタンスがある場合、コストはそこから上昇します。SQL Azureを使用すると、トランザクションコストは発生しませんが、ストレージコストは高くなります。

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

Javaと診断のセットアップに関して、公開されたばかりのPersistentSystemsからのブログ投稿があります。ライブになったら、この回答をリンクで更新します。また、次の投稿で説明するように、診断を設定する外部.net exeを使用してTomcatログ(および関連する解析)を実装するCloud NinjaforJavaもご覧ください。

于 2012-05-31T18:19:38.627 に答える
1

私のブログにアクセスして、ドキュメントをダウンロードしてください。このドキュメントでは、エラーログソリューションの「Tomcatソリューション診断」の章を探すことができます。このドキュメントはかなり前に作成されましたが、このメソッドを使用して、Tomcatであらゆる種類のJavaベースのログ(log4j、確かに)を生成し、直接表示することができます。

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

  • エラーログ
  • ログファイルの表示

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

java.exe、php.exe、pythonなどのカスタムアプリケーションがあるシナリオでは、「ローカルストレージ」フォルダーに直接ログファイルを作成し、ワーカーロール(WorkerRole.cs)でAzure Diagnosticsを初期化して、これらをエクスポートすることをお勧めします。カスタムログファイルをAzureVMからAzureBlobストレージに直接送信します。

ここでは、ローカルストレージにカスタムログを作成する方法について説明します。

Azure Diagnosticsを使用してログをAzureBLOBに送信することは、uが説明した他の方法よりも安価で堅牢です。

于 2012-05-31T18:55:54.760 に答える
1

最後に、Log4Jを作成することにしましたAppender。診断情報を収集する必要はありませんでした。私の主な目標は、簡単に交換できる方法でログファイルを収集することだけでした。私の最初の懸念は、アプリケーションの速度が低下することでしたが、メモリにのみ書き込み、ログデータをAzureテーブルに定期的に書き出すだけで、API呼び出しをあまり行わずに完全に機能します。

これが私の実装の主なステップです:

最初に、Azureテーブルに格納するエンティティクラスを作成しました。これは、LogEntityを拡張するという名前ですcom.microsoft.windowsazure.services.table.client.TableServiceEntity

org.apache.log4j.AppenderSkeleton次に、を含む拡張アペンダーを作成しましたjava.util.List<LogEntity>

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

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

于 2012-06-27T07:20:36.380 に答える
0

別の選択肢;

log4jを標準的な方法(DailyRollingFileAppenderなど)で使用し続けることはできません。ファイルは、VM(IaaS)上のUNCパスにのみ作成する必要があります。このVMには、わずかなディスクスペースが必要ですが、優れた処理能力は必要ありません。したがって、利用可能なVMを共有することも、最小限の構成で、できれば同じリージョンとクラウドサービスでVMを作成することもできます。

蓄積されたログファイルは、RDP/FTPなどを介してアクセスできます。

そうすれば、トランザクションコストや特別なLog4jアペンダーの開発コストが発生しなくなります...より安価な代替手段になる可能性があります。

ありがとうジーバン

PS:私は、アプリケーションサーバーログ(Weblogicのcatalina / manager .logまたは.outファイル)ではなく、アプリケーションログに言及しています。

于 2016-01-08T06:50:31.917 に答える