エラーの処理と例外

ErrorDetector を使用すると、Web トランザクションの完了を妨げる可能性のある重大なアプリケーション エラーの原因を検出および診断することができます。このようなアプリケーションの可用性に関する問題が生じた場合、通常はユーザに対して「404 ページが見つかりません」などのエラー メッセージが表示されることになります。ただし、標準のエラー メッセージには、問題の根本原因を特定するために必要である特定の情報が不足しています。ErrorDetector では深刻なアプリケーション エラーの根本原因解析を行って、トランザクションの整合性を改善します。ErrorDetector は重大なエラーのトランザクション詳細をキャプチャして、エラー数メトリックの記録を実現します。
apmsaas
ErrorDetector を使用すると、Web トランザクションの完了を妨げる可能性のある重大なアプリケーション エラーの原因を検出および診断することができます。このようなアプリケーションの可用性に関する問題が生じた場合、通常はユーザに対して「404 ページが見つかりません」などのエラー メッセージが表示されることになります。ただし、標準のエラー メッセージには、問題の根本原因を特定するために必要である特定の情報が不足しています。ErrorDetector では深刻なアプリケーション エラーの根本原因解析を行って、トランザクションの整合性を改善します。ErrorDetector は重大なエラーのトランザクション詳細をキャプチャして、エラー数メトリックの記録を実現します。
PHP アプリケーション エラー
ErrorDetector は、以下のタイプの PHP アプリケーション エラーを検出します。
例外エラー
PHP 例外のメカニズムでは柔軟なエラー処理を行います。標準的な
例外
クラスを拡張して、独自の例外階層を作成し、特定のレベルのエラーをキャッチして処理することができます。
デフォルトの PHP エージェントは、すべてのフロントエンド スクリプトからスローされ、キャッチされなかった例外を監視します。
トリガ エラー
PHP には組み込みの
trigger_error()
関数があります。 これにより、アプリケーション開発者はさまざまなレベルのエラーを通知することができます。
E_ERROR
または
E_USER_ERROR
などのエラー レベルは致命的とみなされ、スクリプトは中止されます。
通知
または
警告
のレベルを使用する場合は、ログ エントリが作成されます。
PHP エージェントは、すべての致命的なエラーをキャッチし、エラー スナップショットをトリガして、エラー メトリックを更新します。
エラーとして die() または exit() によって中止
多くの古い PHP アプリケーションでは、エラー時にスクリプトを中止する共通の方法として、ユーザのブラウザにメッセージを送信し、スクリプトの実行を中止する
die()
組み込み関数をエラー メッセージと共に使用していました。PHP エージェントは
die()
メソッドの呼び出しを検出し、エラー メトリックおよびスナップショットを生成するよう設計されています。この
die()
の使用は、通常の状況下でアプリケーション スクリプトの終了に使用される場合がある、別の組み込みメソッド
exit()
の使用と区別がつきません。たとえば、PHP アプリケーションによっては、リダイレクションで、リダイレクト スクリプトを
exit()
によって終了します。このようなアプリケーションでは、このようなスクリプトの終了をエラーとして処理することはお勧めできません。エラー メトリックとスナップショットの誤検出を避けるために、
instroscope.agent.php.error.on.abort
プロパティを
false
に設定します。
introscope.agent.php.error.on.abort
プロパティは、以下のアクションを設定します。
  • true
    に設定した場合、
    die()
    または
    exit()
    で PHP スクリプトが終了するたびに、フロント エンドでエラー メトリックが増分され、スナップショットが生成されます。
  • false
    (デフォルト)に設定した場合、
    die()
    または
    exit()
    での終了は正常とみなされ、エラー メトリックの増分やスナップショットの生成は行われません。
以下の手順に従います。
  1. IntroscopeAgent.profile ファイルを開きます。
  2. introscope.agent.php.error.on.abort
    プロパティを見つけて、プロパティを有効または無効にします。
    introscope.agent.php.error.on.abort=false
  3. ファイルを保存します。
    このプロパティへの変更はただちに有効となり、管理対象アプリケーションを再起動する必要はありません。
PHP エージェントは、PHP 例外およびトリガされたエラーと同じように、これらのタイプのスクリプトの中止を表示しますが、
die()
に渡されるメッセージや
exit()
に渡される終了コードをキャッチすることはできません。表示されるメッセージは一般的な中止通知です。
エラーの検出範囲のカスタマイズ
デフォルトの PHP エージェントはフロントエンド スクリプトのエラーのみを検出します。そのため、キャッチされなかった例外を検出対象のフロントエンド スクリプトまでパススルーする必要があります。エラー検出をカスタマイズし、
PhpExceptionErrorReporter
トレーサ マッピングを使用して、他のスクリプト、関数またはクラス メソッドに追加することができます。たとえば、
MyPhpClass
クラスからスローされた例外を検出する際に、呼び出しスクリプトで処理される場合でも、以下の行をカスタム pbd ファイルに追加できます。
TraceAllMethodsOfClass: MyPhpClass PhpExceptionErrorReporter"!BRIDGE!{programname}|{classname}|{method}:Errors Per Interval"
さらに、php-common.pbd の以下の行をコメント化することで、フロントエンドでのエラー検出を無効にすることができます。
TraceAllMethodsIfFlagged: PhpScriptFrontendTracing PhpExceptionErrorReporter"!BRIDGE!{programname}|Frontends|{filename}:Errors Per Interval"
エラー スナップショットの最大数
ErrorDetector のデフォルト オプションを有効にすると、オーバーヘッドをあまり発生させずに、エラー データをキャプチャできます。デフォルトの設定は、15 秒につき 10 個のエラーです。この 15 秒の間隔中により多くのエラーをキャプチャするには、
introscope.agent.errorsnapshots.throttle
プロパティ値を増やします。この値を増やすと、より多くのオーバーヘッドが発生する点に留意してください。
以下の手順に従います。
  1. IntroscopeAgent.profile ファイルを開きます。
  2. introscope.agent.errorsnapshots.throttle
    プロパティを見つけて、15 秒間のエラー スナップショットの最大数の値を設定します。
    introscope.agent.errorsnapshots.throttle=10
  3. ファイルを保存します。
    このプロパティへの変更はただちに有効となり、管理対象アプリケーションを再起動する必要はありません。
フィルタ エラー メッセージ
introscope.agent.errorsnapshots.ignore
プロパティを使用して、追跡しないエラーを無視するようにエージェントを設定します。指定する情報には、完全一致のエラー メッセージ、または「ワイルドカード」のアスタリスク記号を使って表したメッセージの一部を使用できます。
以下の手順に従います。
  1. IntroscopeAgent.profile ファイルを開きます。
  2. introscope.agent.errorsnapshots.ignore
    プロパティを見つけて、プロパティ名に付加されるインデックス ID を使用して、必要なだけフィルタを指定します。
    .0、.1、.2
    など。
    この例で、
    introscope.agent.errorsnapshots.ignore
    プロパティは、それらの中の任意の場所に見つかった
    IOException
    を含むすべてのエラーを無視します。
    introscope.agent.errorsnapshots.ignore.0=*IOException*
    その他のエラーを無視するには、そのエラーに対応したエラーを無視するプロパティを順番に追加します。この例では、2 つのタイプのエラーを無視するように設定されています。
    introscope.agent.errorsnapshots.ignore.0=*IOException* introscope.agent.errorsnapshots.ignore.1=*HTTP Error Code *500*
  3. ファイルを保存します。
    変更がただちに有効になり、管理対象アプリケーションを再起動する必要はありません。
    定義したフィルタに一致するエラーに対してエラー スナップショットは生成されません。エージェントは Enterprise Manager に新しいエラー イベントを送信しません。
ストール イベント メトリック
エージェント レコードは、プローブされたコンポーネントから定義時間内に応答がない場合に停止します。デフォルトでは、エージェントはこの状態を検出し、ストール メトリックをレポートします。
エージェントがストールを確認する度に、メソッド スタックの最上位にあるインスツルメントされたコンポーネントがすべて確認されます。コンポーネントがストールした場合、ストール メトリックおよびストールのエラー スナップショットが作成されます。ストール メトリックは、ダウンストリーム監視をサブスクライブする各コンポーネントに対しても作成されます。ストール メトリックは、メソッド スタックの最上位のインスツルメントされたコンポーネントに対してまず作成されます。これらのメトリックは
introscope.agent.stalls.thresholdseconds
値より長くかかるコンポーネントに対して作成されます。
Introscope では、トランザクション ストールをトランザクション イベント データベース内のイベントとしてキャプチャし、検出したイベントからストール メトリックを生成します。ストール メトリックは、トランザクションの最初と最後のメソッドで生成されます。ストール イベントと関連付けられているメトリックを Workstation の履歴イベント ビューアで表示できます。ストールは、通常のエラーとして保存されます。エラーは、
[エラー]
タブまたは
type:errorsnapshot
のクエリによって[履歴クエリ ビューア]に表示されます。
ストールのしきい値またはストール チェックの頻度の変更
以下のストール プロパティを設定できます。
  • introscope.agent.stalls.thresholdseconds
    このプロパティは、トランザクションがストールしていると見なされる応答時間しきい値の最小値を指定します。Stall Count メトリックの精度を確保するために、ストールのしきい値を 15 秒以上に設定してください。この設定により、Enterprise Manager が収集サイクルを完了する時間を確保できます。デフォルト値は、30 秒です。
  • introscope.agent.stalls.resolutionseconds
    このプロパティは、エージェントがストールをチェックする頻度を指定します。Stall Count メトリックの精度を確保するために、ストールの精度を 10 秒未満に設定しないでください。この設定により、Enterprise Manager が収集サイクルを完了する時間を確保できます。デフォルトは 10 秒です。
以下の手順に従います。
  1. IntroscopeAgent.profile ファイルを開きます。
  2. introscope.agent.stalls.resolutionseconds
    プロパティを見つけ、 トランザクションがストールしているとみなされる応答時間の最小しきい値を指定します。
    introscope.agent.stalls.thresholdseconds=30
  3. introscope.agent.stalls.resolutionseconds
    プロパティを見つけ、トランザクションがストールしていると見なされる応答時間しきい値の最小値を指定します。
    introscope.agent.stalls.resolutionseconds=10
  4. ファイルを保存します。
    これらのプロパティへの変更はただちに有効となり、管理対象アプリケーションを再起動する必要はありません。