デーモンとして実行できるアプリケーションを検索または開発し、ホストで実行されているJavaアプリケーションが例外またはエラーを受け取ったときに電子メールまたはSMSで管理者に通知したいと思います。JVMTIが私の目標の一部を達成できることは知っていますが、それは監視対象アプリケーションのパフォーマンスに影響を与えます(どれだけになるかはわかりませんが、わずかであれば許容されます)。また、開発するのは面倒な作業のようです。 JVMTIエージェントであり、複数のアプリケーションが同じエージェントを使用して同時に実行された場合にどうなるかわかりません。より良い解決策はありますか?前もって感謝します。
6 に答える
1つの方法は、log4jのようなロギングシステムを使用して、システムAで発生したすべてのエラーをシステムBのロギングサーバーに公開し、そこから発生したエラーを監視することです。ただし、log4j(または他のロギングシステム)に伝播された例外のみが処理されるため、これは完全に一般的な解決策ではありませんが、良いスタートになる可能性があります。
最善の解決策は、Javaアプリケーションにエラーをemail/sms経由で送信させることです。問題は、プログラムが例外を生成し、通常の操作で正しく処理することです。特定の例外のみが必要です。
これに失敗すると、アプリケーションのログを読み取るログリーダーを作成できます。これを正しく行うのは難しいですが、実行することはできます。
アプリケーションは1日あたり1000以上の例外を生成できますが、アプリケーションはこれらの例外の処理方法を知っているため、正常に動作します。たとえば、ソケット接続が閉じられるたびに、例外がスローされる可能性があります。
IMO、最善のアプローチは、外部監視システムを展開することです。これは次のことができます:
- 複数のアプリケーションを監視する
- インフラストラクチャサービスを監視する
- ネットワークの可用性とマシンのアクセス可能性を監視し、
- プロセッサやファイルシステムの使用状況などのリソースを監視します。
アプリケーションは、次のようなさまざまな方法で監視できます。
- ログイベントを処理することにより、
- アプリケーションの再起動を監視することにより、
- アプリケーションのWebAPIを「ping」してサービスの活性を確認し、
- アプリケーションのJMXインターフェースを使用する。
この情報は、インテリジェントな方法でフィルタリングおよび優先順位付けでき、重要なイベントは、最も適切な方法で報告できます。
適切な仕事をするのに十分な情報がないため、個々のアプリケーションが電子メールを送信することは望ましくありません。さらに、レポートロジックを個々のアプリケーションに配置すると、実装の一貫性が失われたり、構成が不十分になったりする可能性があります。
JVMTIの近くに代替手段があります:JPDA。このインフラストラクチャを使用すると、Javaコードを使用してリモートの「デバッガー」を作成し(そう、これを実行する予定です)、ローカル接続またはリモート接続を使用してVMに接続できます。
JVMTIの場合と同様に、プログラム実行のオーバーヘッドが発生します。ただし、Trace.java
例が示すように、ターゲットVMの実装と接続の両方を行うのは非常に簡単です。
最後に、アプリケーションサーバー(JBoss、Glassfish、Tomcat、名前を付けます)によって実行されるコードをインストルメント化する場合は、他にもさまざまな手段が利用可能であることに注意してください。
私はすべての例外がテーブルに記録されるパターンに従います。次に、RSSフィードがそのテーブルから選択します。職場のMSOutlookとAndroid携帯でNewsRobというプログラムを使用してRSSフィードを購読しています。NewsRobは、何か新しいことがあったときに私に警告するように私の電話を設定させてくれました。
これを行う方法については、ここでブログに書いています。 それは.netにありますが、あなたはその考えを理解します。
関連するステップとして、何かが起こらなかったときに自分自身に通知する方法を見つけました。そのブログはこちらです。
パフォーマンスに影響を与えない方法で、探していることを実行するアプリケーションがたくさんあります。エンタープライズソリューション用のKibana/ElasticSearch、またはSplunkまたはLogscapeをご覧になりましたか(どちらも無料バージョンがあります)。
すでに述べたことをエコーし、Javaがすでに提供していることと、外部監視システムで何ができるかを強調します。Javaはすでに以下を提供しています:
- log4j-エラー、警告、致命的および例外をファイルに記録します
- JMX-カスタムアプリケーションメトリックを作成し、java.lang / *にアクセスして、ヒープメモリ使用量、ガベージコレクション、スレッドカウンターなどを取得します。
- JVM gcロギング-すべてのガベージコレクションイベントをファイルに記録し、長いフルGCコレクションを監視できます。
外部監視システムを使用すると、さまざまな運用シナリオでトリガーされるアラートを設定できます。また、チャートを通じてシステムパフォーマンスを視覚化することもできます。私は過去にLogscapeのJavaアプリを使用して、3つのホストに分散している30のJavaプロセスを監視しました。