デーモンとして実行できるアプリケーションを見つけたり開発したりするために、ホスト上で実行されているJavaアプリケーションに例外やエラーが発生した場合に電子メールまたはSMSで管理者に通知します。私はJVMTIが私の目標の一部を達成することができると知っていますが、それは監視されたアプリケーションのパフォーマンスに影響を与えます(私はどれくらいのことになるのでしょうか、それが軽いのであれば容認できます) JVMTIエージェントと同じエージェントを使用して同時に複数のアプリケーションが実行されている場合、どうなるか分かりません。もっと良い解決策はありますか?前もって感謝します。他のJavaアプリケーションによって生成された例外やエラーを監視する方法は?
答えて
システムAで発生しているすべてのエラーをシステムBのログ・サーバーに発行するlog4jのようなロギング・システムを使用すると、発生したエラーをモニターできます。しかし、log4j(または他のロギングシステム)に伝播された例外だけが処理されるため、これは完全に汎用的な解決ではありませんが、それは良いスタートになるかもしれません。
最良の解決策は、Javaアプリケーションが電子メール/ SMS経由でエラーを送信することです。問題は、プログラムが例外を生成し、通常の操作で正しく処理するということです。あなたは特定の例外のみを必要とします。
これに失敗すると、アプリケーションのログを読み取るログリーダーを作成できます。これは正しければ難しいですが、それはできます。
アプリケーションは、1日あたり1000+の例外を生成する可能性があり、アプリケーションがこれらの例外を処理する方法を知っているため、通常動作します。例えばソケット接続がクローズされるたびに例外がスローされます。
Thxになるでしょう。幸いなことに、私たちのアプリケーションはすべてlog4jを使用しています。私はlog4jでソケットアペンダーを使用してLoggingEventオブジェクトをリモートリスナーに送信することを考えています。それはJavaアプリケーションのすべての可能な例外/エラーを監視することはできませんが、それは容認できる解決策です。 – user545838
JVMTIに近い代替手段:JPDAがあります。このインフラストラクチャを使用すると、Javaコードを使用してリモートの「デバッガ」(作成することを計画している)を作成し、ローカルまたはリモートのいずれかの接続を使用してVMに接続できます。
JVMTIと同様に、プログラムの実行にオーバーヘッドが発生します。ただし、Trace.java
の例に示すように、ターゲットVMに実装して接続するのは非常に簡単です。
最後に、アプリケーションサーバー(JBoss、Glassfish、Tomcat、あなたが名前を付けた)で実行するコードを計測する場合は、他にもさまざまな手段があります。
IMOの場合、最善の方法は外部監視システムを導入することです。これは、することができます:
- は、複数のアプリケーション
- 監視インフラストラクチャサービス
- モニタネットワークの可用性と機械アクセシビリティ、プロセッサおよびファイルシステムの使用状況など
- モニタリソースを監視します。
アプリケーションを含む、さまざまな方法で監視することができますへのアプリケーションのWeb APIを「pingする」ことにより、アプリケーションの再起動を監視して、ログイベント、
- 、
- サービスの有効性を確認し、アプリケーションのJMXインターフェイスを使用して
- を使用します。
この情報は、インテリジェントな方法でフィルタリングして優先順位を付けることができ、どのような手段であっても重要なイベントを報告することができます。
まともな仕事をするのに十分な情報がないため、個々のアプリケーションが電子メールを送信しないようにする必要があります。さらに、レポートロジックを個々のアプリケーションに組み込むことで、一貫性のないインプリメンテーションや設定の難しさなどを引き起こす可能性があります。
パフォーマンスに影響を与えない方法で探しているアプリケーションがたくさんあります。エンタープライズソリューションのKibana/ElasticSearch、Splunk、Logscape(どちらも無料版があります)をご覧ください。
私はすでに述べたことをエコーして、すでに提供されているjavaと、外部の監視システムでできることを強調します。 Javaはすでに用意されています
- のlog4j -
- ファイルにエラー、警告、FATALと例外をログJMX - あなたのヒープメモリ使用量を与えるであろう* /カスタムアプリケーションの指標を作成し、またのjava.langへのアクセス権を持っているが、ガベージコレクション、スレッドカウンタなど。
- JVM gc logging - すべてのガベージコレクションイベントをファイルに記録して、長い全GCコレクションを監視できます。
外部監視システムでは、さまざまな運用シナリオでトリガされたアラートを設定できます。また、チャートを通じてシステムのパフォーマンスを視覚化することもできます。私は過去にLogscape's Javaアプリを使用して、30以上のJavaプロセスを監視しました。
- 1. Javascript:他のスクリプトによってスローされた例外を監視する
- 2. アンマネージコードブロックによって生成された例外を処理する方法
- 3. CLRに代わって発生するすべての例外を監視する方法は?
- 4. McAfeeスキャンによって発生した例外を無視する方法
- 5. Azure AD Web App/APIアプリケーションの "新規アプリケーション登録"で生成されたキーを監視する方法は?
- 6. Java監視アプリケーション
- 7. Mesos javaアプリケーション監視
- 8. appdynamicsのJavaアプリケーションの監視
- 9. Javaのテキストファイルを監視する方法
- 10. INofityDataErrorInfoによって生成されたエラーをクリアする方法
- 11. Googleアプリケーションエンジンのアプリケーション監視Java
- 12. 外部アプリケーションでSQL Serverテーブルを監視する方法
- 13. Java Webアプリケーションのトラフィックを監視する
- 14. AC_CHECK_HEADERSから生成された `configure 'によって選択されたシステムファイルを無視する方法
- 15. プロパティグリッドによってスローされた例外を処理する方法は?
- 16. CLRによってスローされた例外を検出する方法は?
- 17. ExecutorServiceタスクによってスローされた例外を処理する方法は?
- 18. Eclipseにキャッチがないときに例外を監視する方法は?
- 19. Javaクラッシュしたアプリケーション - JVMによって生成されたクラッシュファイルを読み取る方法?
- 20. リモートJavaプロセスを監視する方法
- 21. 他のアプリケーションによって作成されたアクセスDerby DB
- 22. エラー:監視スレッドでの例外の接続では、サーバ
- 23. Javaプログラムによるインストールプロセスの監視方法は?
- 24. Firebaseによって生成された生成キーの処理方法は?
- 25. Javaプログラムのカスタム例外によってコンパイルエラーが発生する
- 26. streaming twitter apiを使ってjavaのハッシュタグを監視する方法は?
- 27. Fiddlerを使用する:Webアプリケーションによって生成されたダウンロードしたファイルをデバッグする方法は?
- 28. デバッグAPIによるプロセス例外の監視
- 29. CompletableFuture.supplyAsyncによってスローされた例外を処理する方法
- 30. httpLbs(http-client)によってスローされた例外をキャッチする方法
アドバイスをいただきありがとうございます。 log4jについて私を混乱させたのは、リモートシステム上のモニタプロセスがクラッシュした場合、それを再起動した後でもlog4jクライアントからログメッセージを受け取ることができるということです。私が理解しているように、リモートモニタープロセスにはサーバーソケットスレッドなどがあり、ポートをリッスンしてlog4jを待って、接続するクライアントソケットとして待機する必要があります。サーバーが停止すると、log4jクライアントのソケットは閉じられます。サーバが再起動されたときに、log4jクライアント自体を再起動せずにlog4jがサーバに接続する方法を通知する方法はありますか? Thx in advance :-) – user545838
Log4jのドキュメンテーションによれば、「リモートサーバがダウンした場合、ロギング要求は単に破棄されますが、サーバが復旧した場合、イベント送信は透過的に再開されます。定期的にサーバーへの接続を試みるコネクタースレッドによって再調整が行われます。 "これは、あなたの答えに〜 – user545838