APMのJavaエージェントは、アプリケーション内で発生したエラーの詳細情報をレポートします。これにより、アプリケーションのパフォーマンスやエンドユーザーの体験に影響を与えている可能性のある問題領域を把握することができます。
Java エージェント バージョン 3.40.0 以降 では、エラーの報告方法を制御するための設定オプションがいくつかあります。
- 予想されるエラーがエラーレートやApdexに影響を与えないように設定する
- エラーの無視
- 自動的に報告されないエラーを報告する
エラーデータの表示については、 Error analytics を参照してください。すべてのエージェントのエラーデータの概要については、 Manage errors in APM を参照してください。
一般的に報告されているエラー例
次のような場合に、Javaエージェントでエラーが発生することがありました。
エラー報告 | コメント |
---|
ハンドリングされないエラー(スタックトレースを含む) | Javaエージェントがトレースしていたトランザクション内で処理されないエラーが発生した場合、そのエラーはフルスタックトレースとともに報告されます。 |
HTTPステータスコード(スタックトレースなし) | トランザクションの結果としてHTTPステータスコードが発生した場合、スタックトレースを伴わずにエラーが報告されます。これは、以下の理由によるものです。 アプリケーションサーバーがエラー状態を検出し、ステータスコードを明示的に設定した。 または エラー状態はプログラム・ロジックによって検出されたため、例外オブジェクトやスタックはありませんでした。 これらのタイプのトランザクションにスタックトレースを含めるためには、 noticeError(...) APIコールを使用する必要があります。
|
noticeError(...) APIコール
| Javaエージェントが noticeError(...) APIコールを使って明示的に呼び出した場合、エラーがトランザクション内で発生したかどうかに関わらず、エラーが報告されます。報告される情報は、 noticeError(...) APIコールで使用されるパラメータに依存し、その内容は、 Javadocs で説明されています。 |
100%以上の未処理エラー報告 | Javaエージェントは、どのトランザクションにも結びつかないエラーである、スコープ外のエラーを報告することができます。このため、1つのタイムスライスに1つのトランザクションがあり、同じタイムスライスに複数のエラーが発生する可能性があります。このような状況では、New Relic はエラー率 が 100% を超えて表示されます。. |
エラーレポートの設定
Javaエージェントには、エラーの報告方法を制御するための柔軟な設定オプションがいくつか用意されています。
設定オプション | 詳細 |
---|
UIによるエラーの設定 | サーバーサイドコンフィグ によって、エラーを無視したり、期待通りのマークを付けたりすることができます。 |
Configure as expected errors via newrelic.yml . | これらのバージョンで報告されるエラー noticeError は、 expected errors in the newrelic.yml として設定することができます。 newrelic.yml で ignored としてエラーが設定されている場合、このAPIへの呼び出しは上書きされます。詳しくは、 Error configuration precedence をご覧ください。 これらの noticeError() API コールを使用して、自動的に報告されないエラーを報告し、 expected errors として newrelic.yml に設定します。 |
Override expected errors via newrelic.yml . | これらのバージョンで報告されるエラー noticeError は、 newrelic.yml expected error の設定を上書きします。yml でエラーが ignored として設定されている場合、この API の呼び出しは上書きされます。詳細は、 Error configuration precedence を参照してください。 これらの noticeError(...) API コールを使用して、自動的に報告されないエラーを報告し、それらを 期待されるエラー として API で設定します(yml の期待されるエラー設定をオーバーライドします)。 |
設定ファイルによるエラーを無視するか期待するか。 | バージョン3.40.0以降では、 YAMLベースの設定 を使用して、エラーの報告方法を制御することができます。これにより、エラーを無視するか、HTTPステータスコードに基づくエラーを期待するか または、例外クラス名のリストとオプションのエラーメッセージに基づく が可能です。 Ignoring errors 指定された例外クラスまたはコードがAPMにまったく報告されないようにします。 Expecting errors 指定された例外クラスやコードが、アプリケーションの エラーレート や Apdex score に影響を与えることを防ぎます。これにより、トラブルシューティングのためにエラー情報を保持しつつ、エラーレートやApdexスコアに基づくアラートを回避することができます。 これらの設定は動的なものなので、実行中のエージェントは、JVMを再起動しなくても newrelic.yml の変更に気づくことができます。詳細と例については、 Javaエージェント設定ファイル を参照してください。
|
エラー収集のためのYAMLベースの設定
YAMLベースのエラーコレクションの設定では、特定のエラーを完全に無視したり、予想されるエラーを除外して、アプリケーションのエラーレートやApadexスコアに影響を与えないようにすることができます。以下の基準に基づいて、エラーを無視または予期されるものとしてマークすることができます。
- HTTPステータスコードの指定された範囲を、カンマで区切られたリストまたは破線の範囲として表示します。
- パッケージ/クラスの完全修飾名を使用したコンマ区切りのリスト および 任意で提供されるエラーメッセージ文字列
デフォルトでは、Java エージェントには error_collector
スタンザが含まれており、その下に YAML ベースのエラー設定 オプションがすべて含まれています。エラー収集は、以下のように有効または無効にすることができます。
特に興味のないエラーは完全に無視することができます。無視すべきエラーを特定することで
アプリケーションのビジネスロジックの一部として 予想される エラーは、エラーレートやApdexスコアに影響を与えないようにしても、APMに報告されます。これにより、トラブルシューティングのためにUIにエラー情報を残しつつ、これらのエラーに起因するアラート(エラーレートやApdexスコアに基づく)を回避することができます。
以下は、 YAMLベースの設定 予想されるエラーに対するオプションを示す例です。
error_collector:
enabled: true
expected_classes:
- "com.example.ExpectedErrorClass"
expected_messages:
com.example.OtherExpectedErrorClass:
- "some expected error message"
expected_status_codes: 406,500-504
エラー設定の優先順位
エラー設定の優先順位は
- サーバー側の設定 (YAMLファイルに値を重ねる)
ignore_*
YAMLのconfigexpected
parameter in noticeError(...)
API callexpected_*
YAMLでの設定
ここでは、さまざまなAPIコールとYAMLの設定を組み合わせた場合の結果の例を紹介します。
YAMLの設定です。
error_collector:
ignore_classes:
- "com.example.ErrorClass"
および
APIコールです。
noticeError(com.example.ErrorClass)
結果。
YAML ignore_classes
は、 noticeError
API コールをオーバーライドし、エラーは無視されます。
YAMLの設定です。
error_collector:
expected_classes:
- "com.example.ErrorClass"
AND
APIコールです。
noticeError(com.newrelic.Exception)
結果。
expected
noticeError
APIコールのパラメータはデフォルトでtrueであり、YAML expected_classes
設定にはエラークラスが含まれています。したがって、エラーは報告され、 expected
としてマークされます。
YAML設定なし
AND
APIコールです。
noticeError(com.newrelic.Exception, expected = true)
結果。
エラーが報告され、期待通りのマークが表示されます。
YAMLの設定です。
error_collector:
ignore_classes:
- "com.example.ErrorClass"
AND
APIコールです。
noticeError(com.newrelic.Exception, expected = true)
結果。
YAML ignore_classes
は、 expected
parameter in noticeError
API call をオーバーライドするので、エラーは無視されます。
YAMLの設定です。
error_collector:
expected_classes:
- "com.example.ErrorClass"
AND
APIコールです。
noticeError(com.newrelic.Exception, expected = false)
結果。
expected
noticeError
APIコールのパラメータは、 expected_classes
をYAMLでオーバーライドします。そのため、このエラーは通常通りに報告されます( expected
としてマークされていません)。
YAMLの設定です。
error_collector:
ignore_classes:
- "com.example.ErrorClass"
AND
YAMLの追加設定
error_collector:
expected_classes:
- "com.example.ErrorClass"
結果。
YAML ignore_classes/ignore_messages
は、YAML expected_classes/expected_messages
を上書きするので、エラーは無視されます。これと同じ原理が ignore_status_codes
と expected_status_codes
にも当てはまります。
エラーの詳細についてログを調べる
ログやアプリケーションのデータをまとめて、トラブルシューティングを簡単かつ迅速に行うことができます。 logs in context では、エラーやトレースに関連するログメッセージをアプリのUIで直接確認することができます。
- Errors ページから、トレースをクリックして Error details ページ に移動します。
- エラー詳細ページで、See logsをクリックします。
- 各ログメッセージに関連する詳細を表示するには、メッセージを直接クリックしてください。
無視されるエラーと期待されるエラーをUIで設定
APM UIを介して、 予想されるエラー を設定すること。
- 有効になっていない場合は、サーバーサイドコンフィグレーションを有効化します。
- 期待通りとマークしたいエラーのあるアプリケーションのサーバー側の設定メニュー にアクセスします。
- エラーコレクション の下で、 Ignore または Exclude expected errors のいずれかに、設定したいエラーの HTTP コードまたはエラークラスを入力します。
- Select Save.
予想されるエラーをUIで表示する方法については、 予想されるエラーを表示する を参照してください。