ErrorDetector の設定および使用方法
内容
apmdevops96jp
内容
ErrorDetector を使用すると、IT チームは以下の処理を行うことができます。
- 異常なトランザクションの頻度を調べる
- ログに記録された例外がユーザに影響を与えるかどうかを調べる
- トランザクション パスのどの部分でエラーが発生したのかを正確に確認する
- 重大なエラーを再現し、診断し、取り除くために必要な情報を取得する
以下の図は、ErrorDetector の設定および使用方法を示しています。

以下の手順に従います。
ErrorDetector の前提条件の確認
ErrorDetector を有効にする前に
- ユーザ アプリケーションを監視するようにエージェントがインストールされ、設定されていることを確認します。
- エラーの種類および高度なエラー データ キャプチャを理解します。
エラーの種類
CA Technologies では一連の基準を定義し、J2EE/.NET 仕様に含まれる情報に基づいて「重大な」エラーについて記述しています。 ErrorDetector では、エラーおよび例外の両方がエラーであると見なされます。 エラーの種類の中で最も一般的なものは、スローされた例外です。
一般的なエラーのいくつかの例を以下に示します。
- HTTP エラー(404、500)注:場合によっては、HTTP 404 エラーはアプリケーション サーバではなく Web サーバで発生することがあります。 このようなエラーが発生した場合、ErrorDetector はエージェントから Web サーバ エラーを検出できません。
- SQL ステートメント エラー
- ネットワーク接続性エラー(タイムアウト エラー)
- バックエンド エラー(JMS を通じてメッセージを送信できない、メッセージ キューにメッセージを書き込めない、など)
ErrorDetector が追跡するエラーの中で、重要でないエラーと見なされるエラーがある場合は、これらのエラーを無視することができます。 追跡する必要のあるエラーがさらに存在する場合は、エラー トレーサを使用して、これらのエラーを追跡するための新たなディレクティブを作成できます。
高度なエラー データ キャプチャ
ErrorDetector は多くの一般的なエラー タイプをデフォルトでキャプチャしますが、CA Technologies では、ユーザのニーズに合わせてエラー検出メカニズムをカスタマイズできるオプションを用意しています。
以下のエラー関連のトレーサを使用して、エラーをキャプチャするための ProbeBuilder ディレクティブ(PBD)を作成できます。
- ExceptionErrorReporterは、標準の例外を報告します。
- MethodCalledErrorReporterは、特定のメソッドがコールされると報告します。
- ThisErrorReporterは、現在のオブジェクトをエラーとして報告します。
- HTTPErrorCodeReporterは、HTTP エラー コードおよび関連するエラー メッセージをキャプチャします。
これらのトレーサを使用して作成した新しいディレクティブは
<Agent_Home>
/wily ディレクトリの errors.pbd ファイルに配置してください。重要:
デフォルトの errors.pbd
は、オーバーヘッドを最小限に抑えながら、重大なエラーを報告するように設計されています。 監視しているすべてのメソッドに ExceptionErrorReporter を適用するなど、エラー追跡を過度に使用すると「誤検出」が多く発生することになります。たとえばこの場合、ユーザが数値フィールドに「California」と入力することで、NumberFormatException
が発生する可能性があります。 この例外を重大な問題として報告することはお勧めできません。ExceptionErrorReporter
ExceptionErrorReporter トレーサは、インスツルメントされたメソッドからスローされる例外を確認するために使用されます。 例外がスローされると、このトレーサはその例外をエラーとして処理します。 エラー メッセージは例外から取得され、それがエラーの最も一般的な定義です。
エラー メッセージをキャプチャするには、ExceptionErrorReporter トレーサを「...WithParameters」ディレクティブと共に使用する必要があります。 たとえば、以下の通りです。
TraceOneMethodWithParametersOfClass: com.bank.CustomerAccount getBalance ExceptionErrorReporter "CustomerAccount:Errors Per Interval"
このディレクティブは、
CustomerAccount
の getBalance()
メソッドからスローされる例外がすべてエラーとなるように指定しています。注:
間隔ごとのエラー数のメトリックを大きくするには、「...WithParameters」ディレクティブを使用しますが、メソッド上のすべてのトレーサでパラメータが利用できるように、「...WithParameters」ディレクティブはいずれのメソッドについても 1 回のみ指定するようにしてください。 たとえば、以下のように指定します。TraceOneMethodWithParametersOfClass: com.myClass myMethod BlamePointTracer
このディレクティブは
com.myClass myMethod
メソッド用のパラメータを ExceptionErrorReporter
トレーサも含めた他のトレーサで利用できるようにしています。MethodCalledErrorReporter
MethodCalledErrorReporter
トレーサは、メソッドがコールされるという行為そのものがエラーが発生したことを意味するメソッドに対して使用されます。 たとえば、以下の通りです。TraceOneMethodOfClass: com.bank.CheckingAccount cancelCheck MethodCalledErrorReporter "CustomerAccount:Canceled Checks Per Interval"
このディレクティブは、cancelCheck() メソッドがコールされると、それがエラーであることを示しています。 エラー メッセージは、クラスおよびコールされたメソッドを示します。
ThisErrorReporter
例外またはエラーをスローするメソッドがわからない場合は、
ThisErrorReporter
トレーサを使用します。 ThisErrorReporter
トレーサは MethodCalledErrorReporter
と類似していますが、インスツルメントされたオブジェクトで toString()
をコールすることによって、エラー メッセージをコンストラクトします。 このトレーサは、以下の 2 つの例に示すように、例外クラスのコンストラクタに配置すると非常に便利です。Java 環境では:
TraceOneMethodWithParametersOfClass: ezfids.util.exception.EasyFidsException <init> ThisErrorReporter "Exceptions|{packageandclassname}:Errors Per Interval"
.NET 環境では:
TraceOneMethodWithParametersOfClass: ezfids.util.exception.EasyFidsException .ctor ThisErrorReporter "Exceptions|{packageandclassname}:Errors Per Interval"
エラー メッセージをキャプチャするには、
ThisErrorReporter
トレーサを「...WithParameters」ディレクティブと共に使用する必要があります。このディレクティブは、
InvalidPINException
のコンストラクタ(「init」または「.ctor」)がコールされると、エラーが構成されることを示しています。 エラー メッセージは、InvalidPINException
で toString()
をコールすることによって決定されます。この処理では通常、アプリケーション開発者が指定したエラー メッセージが返されます。このトレーサは、独自の例外タイプに基づいたカスタムのエラー管理システムを使用している場合に活用することをお勧めします。
注:
Java 環境では、CA Introscope (R) は、java.*
パッケージのコードをインスツルメントできません。 したがって、このトレーサを java.lang.Exception
または java.sql.SQLException
に配置しても機能しません。HTTPErrorCodeReporter
HTTPErrorCodeTracer
トレーサは、サーブレットおよび JSP または ASP.NET ページのエラー コードを報告します。 トレーサは、以下のインシデントをカウントする間隔ごとのカウンタです。- HTTP 応答コード 400 以上
- Java 環境でのコード 400 以上に対する、sendErrorまたはsetStatusのjavax.servlet.http.HttpServletResponseサブクラス呼び出し
- .NET 環境でのコード 400 以上に対する、ProcessRequestの.System.Web.IHttpHandlerサブクラス呼び出し
エージェント内での ErrorDetector の有効化
エージェント インストールでは、ErrorDetector が自動的にインストールされます。 CA Introscope (R) では、エージェントのインストールに errors.pbd と呼ばれる ProbeBuilder ディレクティブ(PBD)ファイルが含まれています。 インストールの後、errors.pbd を使用し、ErrorDetector を有効にするように CA Introscope (R) を設定します。
エラー データのキャプチャ用にエージェントを有効にするには、introscope.agent.errorsnapshots.enable プロパティを true に設定する必要があります。 デフォルトで、エージェントはエラー データのキャプチャが有効になっています。
以下の手順に従います。
- エージェント プロファイル IntroscopeAgent.profile を開きます。
- introscope.agent.errorsnapshots.enable プロパティが true に設定されていることを確認します。注:これは動的プロパティです。 このプロパティの設定は実行時に変更することができ、変更は自動的に反映されます。 ErrorDetector を無効にするには、introscope.agent.errorsnapshots.enable を false に設定します。
- ProbeBuilder ウィザードを使用している場合は、errors.pbd ファイルを<EM_Home>/config/custompbd ディレクトリにコピーして、アプリケーションを再インスツルメントします。
- エージェント プロファイル を保存します。ErrorDetector は有効です。
ErrorDetector オプションの設定
ErrorDetector のデフォルト オプションを有効にすると、オーバーヘッドをあまり発生させずに、エラー データをキャプチャできます。 付属のスロットルは、15 秒につき 10 個のエラーに設定されています。 この間隔でより多くのエラーをキャプチャする場合は、スロットルを増やします。 しかし、スロットルを増やすと、より多くのオーバーヘッドが発生します。
introscope.agent.errorsnapshots.throttle プロパティを使用して、エージェントが Enterprise Manager に送信するエラーの最大数を制限するように ErrorDetector を設定します。
以下の手順に従います。
- エージェント プロファイル IntroscopeAgent.profile を開きます。
- introscope.agent.errorsnapshots.throttle プロパティの新しい値を入力します。 このプロパティは、エージェントが 15 秒間に送信できるエラー スナップショットの最大数を指定します。デフォルト:10注:このプロパティの変更はただちに有効になり、管理対象アプリケーションを再起動する必要はありません。
- エージェント プロファイル を保存します。15 秒間にキャプチャされるエラーの数が設定されます。
introscope.agent.errorsnapshots.ignore プロパティを使用して、追跡しないエラーを無視するようにエージェントを設定します。 エラーを「タグ付け」する(エラーを識別する)ために指定する情報には、完全一致のエラー メッセージ、またはワイルドカードのアスタリスク記号を使って表したメッセージの一部を使用できます。 このプロパティへの変更はただちに有効となり、管理対象アプリケーションを再起動する必要はありません。
重要:
introscope.agent.errorsnapshots.ignore プロパティは、SOAP エラー メッセージのフィルタには使用できません。以下の手順に従います。
- エージェント プロファイル IntroscopeAgent.profile を開きます。
- introscope.agent.errorsnapshots.ignore プロパティを使用して、エラーの種類を識別する情報を指定します。たとえば、以下の ignore プロパティでは、プロパティで指定された「IOException」という用語が含まれるすべてのエラーが無視されます。
その他のエラーを無視するには、そのエラーに対応したエラーを無視するプロパティを順番に追加します。 たとえば、2 種類のエラーを無視するには、プロパティを以下のように指定できます。introscope.agent.errorsnapshots.ignore.0=*IOException*introscope.agent.errorsnapshots.ignore.0=*IOException* introscope.agent.errorsnapshots.ignore.1=*HTTP Error Code *500*注:フィルタは、プロパティ名に付加されるインデックス ID (例、.0、.1、.2 ...)を使用して、必要な数だけ作成できます。 このプロパティへの変更はただちに有効となり、管理対象アプリケーションを再起動する必要はありません。 - エージェント プロファイルへの変更を保存します。定義したフィルタに一致するエラーに対してスナップショットは生成されません。 また、エラー イベントは該当する Enterprise Manager に送信されません。
ErrorDetector を使用したエラーの表示
CA Introscope (R)では、トランザクションはサービスの呼び出しと処理として定義されています。 Web アプリケーションのコンテキストでは、Web ブラウザから送信された URL の呼び出しと処理を指します。 Web サービスのコンテキストでは、SOAP メッセージの呼び出しと処理を指します。
ErrorDetector を使用して以下を実行できます。
- Workstation によるエラーの表示
- Live Error Viewer によるエラーの表示
- Transaction Tracer によるエラーの表示
Workstation によるエラーの表示
Workstation から、Investigator にエラー メトリック データを表示できます。
以下の手順に従います。
- Workstation にログインします。
- [新規 Investigator]をクリックします。
- [メトリック ブラウザ]タブで、*SuperDomain*を展開して、使用可能なエージェントのリストを表示します。
- エラーを表示するエージェントおよび Investigator ノードを選択します。注:[間隔ごとのエラー数]で検索して、表示間隔においてエラーを発生させたノードを検出できます。
- 右ペインの[エラー]タブをクリックして、Investigator のエラー メトリック データを表示します。errors.pbd ファイルを使用すると、Errors Per Interval メトリックが生成され、いくつかのデフォルト リソースの下に表示されます。 たとえば、以下の通りです。
- Java 環境における J2EE コネクタ、サーブレット、JTA、および HTTP などの J2EE リソース
- .NET 環境内の ASP.NET ページ、ADO.NET データ ソース、メッセージング キュー、Web メール、およびエンタープライズ サービス トランザクションなどの .NET フレームワーク リソース
Live Error Viewer によるエラーの表示
エラー スナップショット内のエラー詳細を含めて、ライブ エラー ビューアにライブ エラーを表示できます。 エラー スナップショットには、エラーがどのように発生したかに関するコンポーネント レベル情報が表示されます。
以下の手順に従います。
- Workstation にログインします
- 現在発生しているエラーを表示するには、Workstation コンソールまたは Investigator ウィンドウから[新規ライブ エラー ビューア]を選択します。
- エラー データ テーブルの行をクリックすると、下のペインにそのエラーのエラー スナップショットが表示されます。エラー データ テーブルは、以下のエレメントで構成されます。
- Agentエージェント名を示します。
- Timestampルート コンポーネントの呼び出し開始時刻(システム クロックに基づく)を示します。
- Descriptionエラーのコンポーネントの種類を示します。 この説明は、コンポーネントのリソース名の最初のセグメントにマップされます。標準の J2EE Blamed メトリックの場合は、Servlets、JSP、EJB、JNDI などが例として挙げられます。.NET コンポーネントの場合の例としては、Messaging および WebMail があります。 カスタム トレーサの実装では、カテゴリが、Blamed メトリックのメトリック リソースの最初のセグメントと一致します。 メトリック リソースにセグメントがない場合は、[説明]が「カスタム トレーサ」にマップされます。
- エラー メッセージキャプチャされた完全一致のエラー メッセージを表示します。
- 列の見出しをクリックして、その列の内容によって行を並べ替えます。 新しいエラーが発生すると、これらのエラーは並べ替え順にしたがって表示されます。
- エラー テーブル ペインでエラーをクリックすると、エラー スタック ビューが下部ペインに表示されます。エラー メッセージは赤で表示されます。
Transaction Tracer によるエラーの表示
Transaction Tracer を使用して、トランザクション パスのコンテキスト内で、なぜ、またどのようにして重大なエラーが発生したのかを正確に知ることができます。
以下の手順に従います。
- [Workstation]-[新規トランザクション追跡セッション]を選択します。
- [最小トランザクション継続時間]ダイアログ ボックスに、トランザクション追跡セッションの長さを入力します。
- [追跡エージェント]セクションで、オプションを選択して、トランザクション追跡セッションで追跡するエージェントを定義します。
- 他のフィルタ オプションに加えて、[エラー]を選択して、フィールドに検索するエラー情報を入力します。
- [OK]をクリックします。エラーを含むトランザクション追跡は、トランザクション追跡ビューア ウィンドウに表示されます。テーブルでトランザクションを選択すると、トランザクション スナップショットが表示されます。 トランザクション内でエラーが発生した場合は、[トランザクション追跡]ウィンドウで、特定のトランザクション スナップショットの背景が赤で表示されます。注:無視するようにタグ付けされたエラーは、トランザクション追跡ビューアに表示されていても、ライブ エラー ビューアには表示されないことがあります。 このようなシナリオは、IntroscopeAgent.profileの ignore コマンドをエージェントが処理し終わる前に、アプリケーションのエラーが表示された場合に発生します。
- スナップショットでそのエラーをクリックすると、トランザクション スナップショットの下のプロパティ ペインに詳細が表示されます。
注:
プロパティの詳細で任意のフィールドのテキストを選択して、キーボード コマンドでコピーできます。すべてのエラーおよびトランザクションはトランザクション イベント データベースに維持されるため、履歴データの分析を通してトレンドを見極めることができます。 トランザクション イベント データベースには、エージェントによってキャプチャされたエラーおよびトランザクション追跡データが含まれています。 トランザクション イベント データベースのエラー情報は、エラー属性およびテキストに基づいてエラーをクエリして表示および分析できます。 選択したエラーに類似するエラー、または相関するエラーをクエリすることによって、分析の範囲を拡張できます。