AppDynamicsアプリケーションインテリジェンスプラットフォームは、監視対象環境内におけるビジネストランザクションエラーに関する情報を取得し提示します。
上位レベルでは、指定したメソッドに基づくカスタムエラーイベントなど、コードレベルの例外またはエラーイベントにより通常の処理が影響を受けた場合に、ビジネストランザクションでエラーが発生したとみなされます。
エラーと例外に関する情報の表示
コントローラUIには、トランザクションスナップショット、メトリック、およびダッシュボードなど、UIのさまざまな場所のエラーおよび例外に関する情報が表示されます。
フローマップ内のティアに関する情報ポップアップには、そのティアのエラー率メトリックを表示するエラータブが含まれています。
アプリケーションおよびティアフローマップでは、エラー率はすべてのビジネストランザクションを対象としています。ビジネストランザクションフローマップでは、エラーは現在のビジネストランザクションのみを対象としています。
メトリックブラウザには Error メトリックが含まれています。
[Troubleshoot] > [Errors] ページにはすべてのエラートランザクションが表示されます。このページには、トランザクションエラーと例外の2つのタブがあります。
これらのタブには、エラーまたは例外の割合に関する情報が表示され、下図に示すようにエラーまたは例外にドリルダウンして詳細情報を確認できます。
ビジネス トランザクション エラー
構成済みのエラー検出ルールに従ってコントローラ UI の選択した時間内で検出されたすべてのトランザクションエラーは、[Errors] ページの [Error Transactions] タブに表示されます。
デフォルトで、AppDynamics では、トランザクションのコンテキストで以下のいずれかのタイプのイベントが検出された場合に、ビジネストランザクションがエラーであるとみなされます。
エラー検出の構成については、「エラー検出」で説明されています。
ダウンストリームティアで発生し、発生元のティアに伝播されないエラーはビジネス トランザクション エラーにはなりません。たとえば、発生元のクライアントが 200 Success 応答を受信した場合、ビジネストランザクションはエラーとみなされません。ダウンストリームティアに含まれるエラーは、継続するセグメントの「1 分あたりのエラー数」メトリックにはカウントされます。
ビジネストランザクションにエラーが発生した場合、エラートランザクションとしてのみカウントされます。トランザクションが遅延または停滞していた場合でも、遅い、非常に遅い、または停滞するトランザクションとしてカウントされません。
AppDynamics のコード例外
ビジネス トランザクション エラーの一般的な原因はコードの例外です。[Errors] ページの [Exceptions] タブには、すべてのトランザクションの例外を集約したビューが表示されます。このビューの目的上、AppDynamics は以下のインシデントを例外とみなします。
- 重要度が Error または Fatal である例外(Log4j、java.util.logging、Log4Net/NLog、サポートされているその他のロガーを使用する場合)。これは、ビジネストランザクションのコンテキスト外で発生した場合にも適用され、例外タイプは Application Server であると指定されます。
- ビジネストランザクションのコンテキストでは発生しないHTTPエラー。
- エラーページのリダイレクト。
ビジネストランザクション内で発生し処理される例外については、AppDynamics はキャプチャせず、[Exceptions] タブにも表示されません。
エラーをトラブルシューティングする際には、ビジネス トランザクション エラーの数が必ずしも特定の時間帯における例外数に対応するとは限りません。エラートランザクションとしてカウントされる単一のトランザクションは、複数の例外に対応する可能性があります。たとえば、トランザクションがティアを横断している場合には、それぞれで例外が生成される可能性があります。通常、エラーのトラブルシューティングを行うには、エラーの起点に最も近い例外を見つける必要があります。
例外のスタックトレースが利用可能な場合は、コントローラ UI の [Exception] タブからアクセスできます。ログをコールする際に例外を渡した場合、その例外に対するスタックトレースを使用できます。たとえば logger.log(Level.ERROR, String msg, Throwable e)
形式でログをコールした場合はスタックトレースが含まれますが、logger.log(Level.ERROR, String msg)
形式のコールでは含まれません。
エージェントのエラー
Javaエージェントでは、エージェントの内部エラーとアプリケーションエラーが区別されます。デフォルトでは、エージェントの内部エラーによって正常性ルール違反が発生することはありません。エージェントの内部エラーは、メトリックブラウザの次のパスで確認できます。Application Infrastructure Performance > <tier> > Agent > Internal Errors
エラーと例外の上限
AppDynamicsでは、登録されたエラータイプの数を(エラーログイベント、例外チェーンなどに基づき)4000までに制限しています。登録されたエラータイプの統計情報のみが保持されます。
この制限に達すると、CONTROLLER_ERROR_ADD_REG_LIMIT_REACHED
イベントが生成されます。上限を増やすことは可能ですが、キャプチャする必要がないエラーが無視されるようにデフォルトのエラー検出ルールを絞り込み、エラー登録数を減らすことをお勧めします。
詳細については、「エラー検出」でログのエラーと例外を無視する構成に関する情報を参照してください。
エラーと例外の構成
AppDynamicsは、多くの一般的なフレームワークのエラーと例外を自動的に認識します。必要に応じて(たとえば、独自のカスタムエラーフレームワークを使用する場合など)、デフォルトのエラー検出動作をカスタマイズできます。「エラー検出」を参照してください。