.NET agentレポート処理エラー
.NET agentレポート処理エラー

.NET agentレポート処理エラー

問題点

.NET agent がまるで標準エラーのように処理エラーを報告する。これはAzureのWorkerロール、コンソールアプリ、非同期ワークや同様の操作で最も頻繁に起こります。

解決方法

これらの誤ったエラーレポートを避けるには、例外ハンドラーが直接的、間接的に含まれているメソッドをインストルメント化します。この例では、『GetResponse() 』がエラーをスローします。

カスタムインストルメンテーションファイルを定義する、またはカスタムトランザクションにメソッドをラップすることによって対象のメソッドをインストルメント化します。

エラーをスローしてレスポンスを取得する

この例では、method『Foo()』がインストルメント化しない限り、New Relicは『GetResponse()』からのエラーをレポートします。Fooがインストルメント化された場合、Fooが呼び出されるとトランザクションが開始され、Fooが終了するとトランザクションが終了します。Fooが終了する前にエラーが処理されるため、New Relicはエラーをレポートしません。GetReponseはFooトランザクションのセグメントとなります。

カスタムインストルメンテーションファイルの定義

カスタムインストルメンテーションを介してFooをインストルメント化するには、カスタムインストルメンテーションファイルを定義します。この例ではCustomInstrumentation.xmlです。

New Relicの拡張フォルダーにCoreInstrumentation.xmlと一緒にCustomInstrumenation.xml を入れ、アプリケーションを再起動します。詳しくはカスタムインストルメンテーションをご覧ください。

カスタムトランザクション内でメソッドをラップする

カスタムトランザクションを介してFooをインストルメント化するには、カスタムトランザクション内のFooをラップします。

詳しくはカスタムトランザクションをご覧ください。

原因

.NET用New Relicがレポートする唯一のエラーはトランザクションを終了させる未処理のエラーです。したがって、アプリがトランザクション終了前に例外ハンドラーを呼び出す場合、New Relicはエラーをレポートしません。ただし、New Relicはウェブトランザクション、WCGトランザクション、またはカスタムトランザクション外でエラーが起こった場合、常に例外ハンドラーを検出できるとは限りません。これはエージェントがトランザクションと関連していないインストルメント化されたメソッド用の「ミニトランザクション」を生成するためです。インストルメント化されたメソッドが存在するとき、ミニトランザクションは終了します。ミニトランザクションがエラーをスローする場合、インストルメント化されたメソッドはそれを処理しないため、New Relicがエラーをレポートします。

これは『GetResponse()』と呼ばれるコンソールアプリ内でご覧いただけます。上記の例にあるように、GetResponseがエラーをスローする場合、GetResponseがtry/catch ブロック内で呼び出された場合でも、New Relicはエラーをレポートします。GetResponseの「ミニトランザクション」は終了するためエージェントはエラーをレポートします。エージェントが関わっている限り、エラーはトランザクション出口で未処理のままになります。

関連情報

追加のドキュメンテーションリソースは次のとおりです。

  • カスタムインストルメンテーション (トランザクショントレースに詳細を追加する方法
    カスタムトランザクション (エージェントがトランザクションを自動的に検出しない場合のトランザクションの記録の方法)

New Relic オンライン テクニカル コミュニティの .NET監視に関するディスカッションにぜひご参加ください! テクニカルコミュニティは、 New Relicツールセットについて議論し、トラブルシューティングを行うための公開プラットフォームです。

PROプランのすべての機能を
14日間無料でお試し

新規無料登録いただくとPROプランのすべての機能を
14日間無料でお試しいただけます。
クレジットカードなど決済情報の登録は不要です。

各プランの詳細はこちらからご確認ください。