2010-12-17 8 views
0

デーモンとして実行できるアプリケーションを見つけたり開発したりするために、ホスト上で実行されているJavaアプリケーションに例外やエラーが発生した場合に電子メールまたはSMSで管理者に通知します。私はJVMTIが私の目標の一部を達成することができると知っていますが、それは監視されたアプリケーションのパフォーマンスに影響を与えます(私はどれくらいのことになるのでしょうか、それが軽いのであれば容認できます) JVMTIエージェントと同じエージェントを使用して同時に複数のアプリケーションが実行されている場合、どうなるか分かりません。もっと良い解決策はありますか?前もって感謝します。他のJavaアプリケーションによって生成された例外やエラーを監視する方法は?

答えて

1

システムAで発生しているすべてのエラーをシステムBのログ・サーバーに発行するlog4jのようなロギング・システムを使用すると、発生したエラーをモニターできます。しかし、log4j(または他のロギングシステム)に伝播された例外だけが処理されるため、これは完全に汎用的な解決ではありませんが、それは良いスタートになるかもしれません。

+0

アドバイスをいただきありがとうございます。 log4jについて私を混乱させたのは、リモートシステム上のモニタプロセスがクラッシュした場合、それを再起動した後でもlog4jクライアントからログメッセージを受け取ることができるということです。私が理解しているように、リモートモニタープロセスにはサーバーソケットスレッドなどがあり、ポートをリッスンしてlog4jを待って、接続するクライアントソケットとして待機する必要があります。サーバーが停止すると、log4jクライアントのソケットは閉じられます。サーバが再起動されたときに、log4jクライアント自体を再起動せずにlog4jがサーバに接続する方法を通知する方法はありますか? Thx in advance :-) – user545838

+0

Log4jのドキュメンテーションによれば、「リモートサーバがダウンした場合、ロギング要求は単に破棄されますが、サーバが復旧した場合、イベント送信は透過的に再開されます。定期的にサーバーへの接続を試みるコネクタースレッドによって再調整が行われます。 "これは、あなたの答えに〜 – user545838

1

最良の解決策は、Javaアプリケーションが電子メール/ SMS経由でエラーを送信することです。問題は、プログラムが例外を生成し、通常の操作で正しく処理するということです。あなたは特定の例外のみを必要とします。

これに失敗すると、アプリケーションのログを読み取るログリーダーを作成できます。これは正しければ難しいですが、それはできます。

アプリケーションは、1日あたり1000+の例外を生成する可能性があり、アプリケーションがこれらの例外を処理する方法を知っているため、通常動作します。例えばソケット接続がクローズされるたびに例外がスローされます。

+0

Thxになるでしょう。幸いなことに、私たちのアプリケーションはすべてlog4jを使用しています。私はlog4jでソケットアペンダーを使用してLoggingEventオブジェクトをリモートリスナーに送信することを考えています。それはJavaアプリケーションのすべての可能な例外/エラーを監視することはできませんが、それは容認できる解決策です。 – user545838

0

JVMTIに近い代替手段:JPDAがあります。このインフラストラクチャを使用すると、Javaコードを使用してリモートの「デバッガ」(作成することを計画している)を作成し、ローカルまたはリモートのいずれかの接続を使用してVMに接続できます。

JVMTIと同様に、プログラムの実行にオーバーヘッドが発生します。ただし、Trace.javaの例に示すように、ターゲットVMに実装して接続するのは非常に簡単です。

最後に、アプリケーションサーバー(JBoss、Glassfish、Tomcat、あなたが名前を付けた)で実行するコードを計測する場合は、他にもさまざまな手段があります。

1

IMOの場合、最善の方法は外部監視システムを導入することです。これは、することができます:

  • は、複数のアプリケーション
  • 監視インフラストラクチャサービス
  • モニタネットワークの可用性と機械アクセシビリティ、プロセッサおよびファイルシステムの使用状況など
  • モニタリソースを監視します。

アプリケーションを含む、さまざまな方法で監視することができますへのアプリケーションのWeb APIを「pingする」ことにより、アプリケーションの再起動を監視して、ログイベント、

  • を処理することにより

    • サービスの有効性を確認し、アプリケーションのJMXインターフェイスを使用して
    • を使用します。

    この情報は、インテリジェントな方法でフィルタリングして優先順位を付けることができ、どのような手段であっても重要なイベントを報告することができます。

    まともな仕事をするのに十分な情報がないため、個々のアプリケーションが電子メールを送信しないようにする必要があります。さらに、レポートロジックを個々のアプリケーションに組み込むことで、一貫性のないインプリメンテーションや設定の難しさなどを引き起こす可能性があります。

  • 0

    すべての例外がテーブルに記録されるパターンに従います。 RSSフィードは、そのテーブルから選択します。 職場のMS OutlookのRSSフィードと、NewsRobというプログラムを使用しているAndroidの電話機に登録します。 NewsRobは何か新しいことがあるとき私に警告するために私の携帯電話を設定することができます。

    私はこれを行う方法についてブログしていますHERE.それはネットではありますが、あなたはアイデアを得る。

    関連するステップとして、私は何かが起こらなかったときに自分自身に通知する方法を見つけました。そのブログはHERE.

    0

    パフォーマンスに影響を与えない方法で探しているアプリケーションがたくさんあります。エンタープライズソリューションのKibana/ElasticSearch、Splunk、Logscape(どちらも無料版があります)をご覧ください。

    私はすでに述べたことをエコーし​​て、すでに提供されているjavaと、外部の監視システムでできることを強調します。 Javaはすでに用意されています

    • のlog4j -
    • ファイルにエラー、警告、FATALと例外をログJMX - あなたのヒープメモリ使用量を与えるであろう* /カスタムアプリケーションの指標を作成し、またのjava.langへのアクセス権を持っているが、ガベージコレクション、スレッドカウンタなど。
    • JVM gc logging - すべてのガベージコレクションイベントをファイルに記録して、長い全GCコレクションを監視できます。

    外部監視システムでは、さまざまな運用シナリオでトリガされたアラートを設定できます。また、チャートを通じてシステムのパフォーマンスを視覚化することもできます。私は過去にLogscape's Javaアプリを使用して、30以上のJavaプロセスを監視しました。

    関連する問題