トランザクション追跡オプションの設定

このセクションでは、デフォルトのトランザクション追跡の動作および関連する設定オプションについて説明します。
apmdevops104jp
このセクションでは、デフォルトのトランザクション追跡の動作および関連する設定オプションについて説明します。
自動トランザクション追跡
スマート インスツルメンテーションを有効にすると、以下の場合に Introscope がトランザクション追跡を自動的に収集します。
  • 差異分析でアプリケーションの不安定な状態を検出し、間隔ごとの自動追跡クランプの制限は超えていない場合。
    注:
    差異分析に基づく自動トランザクション追跡には、少なくとも 10.0 エージェントが必要です。
  • エラーの発生時
  • ComponentTimeAutoTraceTriggerTracer
    トレーサが展開されている状態で、コンポーネント応答時間を超過した場合。
  • API がカスタム基準に基づいて自動トランザクション追跡をトリガした場合。
    詳細については、CA Technologies プロフェッショナル サービスにお問い合わせください。
高度に最適化されたオーバーヘッドの少ないトレーサにより、自動トランザクション追跡が収集されます。自動追跡のパフォーマンス オーバーヘッドは、手動実行、サンプル、およびその他のトランザクション追跡よりはるかに小さくなっています。このようなその他のトランザクション追跡のタイプでは、エージェント フィルタリングを使用するため、オーバーヘッドが増えます。自動トランザクション追跡では、その他のタイプのトランザクション追跡で表示されるコンポーネントの詳細プロパティがすべて表示される訳ではありません。
コンポーネント応答時間を超過した場合の自動トランザクション追跡のトリガ
コンポーネント応答時間を超過した場合に、トランザクション追跡を自動的にトリガするように PBD を展開できます。この自動追跡を収集するトレーサを持つ PBD エントリを作成します。たとえば、特定のサーブレットの応答時間が 10 秒を超えた場合に追跡を収集します。この機能を設定するには、
ComponentTimeAutoTraceTriggerTracer
トレーサ オプションを使用します。
注:
CA APM もカスタム条件に基づいて自動トランザクション追跡を起動するための API を提供します。詳細については、CA Technologies プロフェッショナル サービスにお問い合わせください。
以下の手順に従います。
  1. ComponentTimeAutoTraceTriggerTracer
    トレーサが含まれる PBD を作成します。
    1. pbd ファイルを作成します。
      たとえば、autotracetrigger.pbd。
    2. テキスト エディタを使用して PBD を開きます。
    3. レスポンスのしきい値が含まれる新しいトレーサを定義します。たとえば、
      MySpecialTimeTriggerTracer
      SetTracerClassMapping: MySpecialTimeTriggerTracer com.wily.introscope.agent.trace.hc2.ComponentTimeAutoTraceTriggerTracer com.wily.introscope.probebuilder.validate.ResourceNameValidator SetTracerParameter: MySpecialTimeTriggerTracer responsethreshold <
      value
      >
    4. 必要なクラスおよびメソッドにトレーサを追加します。たとえば、10 秒間のレスポンスしきい値にトリガする
      MySpecialTimeTriggerTracer
      。たとえば、以下の通りです。
      #Defining the threshold tracer
      SetTracerClassMapping: MySpecialTimeTriggerTracer com.wily.introscope.agent.trace.hc2.ComponentTimeAutoTraceTriggerTracer com.wily.introscope.probebuilder.validate.ResourceNameValidator
      SetTracerParameter: MySpecialTimeTriggerTracer responsethreshold 10
      #Using directive to trigger traces on sample class
      TraceOneMethodWithParametersOfClass: com.my.app.SpecialClass doSomething MySpecialTimeTriggerTracer “ExampleTrigger”
      また、トレーサ グループを使用することができます。たとえば、トレーサ グループを使用したサーブレット JSP の追跡用のトレーサを作成できます。サーブレットの実行時間が 10 秒を超える場合は常に、自動トランザクション追跡をトリガするこのトレーサを定義できます。
      #Defining the Servlet threshold tracer
      SetTracerClassMapping: ServletTriggerTracer com.wily.introscope.agent.trace.hc2.ComponentTimeAutoTraceTriggerTracer com.wily.introscope.probebuilder.validate.ResourceNameValidator
      SetTracerParameter: ServletTriggerTracer responsethreshold 10
       
      #Assignning the tracer to JSP and Servlet Tracer Groups
      #Tracing to extend the core Introscope Servlet monitoring
      TraceOneMethodWithParametersIfFlagged: JSPServletTracing _jspService ServletTriggerTracer "ExampleServletTrigger"
      TraceOneMethodWithParametersIfFlagged: HTTPServletTracing service(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V ServletTriggerTracer "ExampleServletTrigger"
      TraceOneMethodWithParametersIfFlagged: HttpServletTypeSpecificServiceTracing service(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V ServletTriggerTracer "ExampleServletTrigger"
    5. ファイルを保存します。
  2. PBD をエージェント プロファイルに追加します。
    1. 管理対象アプリケーションを停止します。
    2. IntroscopeAgent.profile ファイルをテキスト エディタで開きます。
    3. 新しい PBD を
      introscope.autoprobe.directivesFile
      プロパティに追加します。
      例:
      introscope.autoprobe.directivesFile=typical.pbl, autotracetrigger.pbd
    4. 管理対象アプリケーションを再起動します(必要な場合と、動的インスツルメンテーションが有効でない場合)。
  3. 自動トランザクション追跡を確認します。
    1. コンポーネント応答時間しきい値を超えるトランザクションを実行します。
    2. テーブル内のトランザクションを選択します。
    3. 下部のペインの [追跡ビュー] タブをクリックし、グラフィカル スタック内のコンポーネントをクリックします。
    4. [コンポーネント詳細]領域で、
      Auto Trace Trigger Criteria
      プロパティを検索します。
    5. 値がしきい値を超えたコンポーネント時間であることを確認します(
      しきい値
      )。
      値を確認できない場合、
      ComponentTimeAutoTraceTriggerTracer
      で、目的のクラスがインスツルメントされているかどうかを表示するために AutoProbe ログを確認します。
トランザクション追跡サンプリング
トランザクション追跡サンプリングによって、明示的にトランザクション追跡を実行しなくても、問題になりそうなトランザクション タイプの履歴分析が可能になります。
サンプル トランザクション追跡は、エラー、ストール、詳細な可視性のコンポーネント、およびエントリ ポイントを表示します。
また、指定した間隔の間に追跡するトランザクションの数を指定するためにトランザクション追跡サンプリングを設定できます。たとえば、Introscope は 2 分間隔で 3 つのトランザクション追跡サンプルを取得することができます。
以下の手順に従います。
  1. IntroscopeAgent.profile ファイルをテキスト エディタで開きます。
  2. 以下のプロパティを設定します。
    1. トランザクション追跡サンプリングを有効にするかどうかを指定する
      introscope.agent.transactiontracer.sampling.enabled
      を設定します。デフォルトは true です。
    2. introscope.agent.transactiontracer.sampling.perinterval.count
      を設定し、指定した間隔の間に追跡するトランザクションの数を指定します。
      デフォルトは 1 です。
    3. サンプル トランザクション追跡を追跡する時間の長さを指定する
       introscope.agent.transactiontracer.sampling.interval.seconds
      を設定します。
      デフォルトは 120 (秒)です。
  3. 動的インスツルメンテーションが有効でない場合は、管理対象のアプリケーションを再起動します。
     
注:
sampling.perinterval
および
sampling.interval
プロパティのデフォルト値を増やす前に、Enterprise Manager 内での負荷が増大する可能性を考慮してください。
これらのプロパティも Enterprise Manager のプロパティ ファイルに保存されています。Enterprise Manager は、自身に接続しているすべてのエージェントに対して、この設定をプッシュします。エージェント内でこれらのプロパティを設定すると、Enterprise Manager によって個別のエージェント向けに行われた設定が上書きされます。
トランザクション追跡コンポーネントのクランプ数
Introscope では、追跡のサイズを制限するクランプが設定されます。デフォルトは 5000 コンポーネントです。この制限に達すると、警告がログに出力され、追跡が停止します。
予想されるコンポーネント数を超えるコンポーネント トランザクションをクランプすることができます。たとえば、サーブレットが数百のオブジェクト インタラクションおよびバックエンドの SQL コールを実行する場合です。クランプがない場合、トランザクション追跡は、これを 1 つのトランザクションと見なし、無限に実行し続けます。特定の極限状態にあるときに適所でクランプが実施されない場合、JVM は追跡を完了する前にメモリ不足に陥ってしまいます。
トランザクションをクランプするための以下のプロパティは、IntroscopeAgent.profile ファイル内にあります。
introscope.agent.transactiontrace.componentCountClamp
=
5000
クランプされたコンポーネントを生成している追跡は、アスタリスクを付けて示されます。
重要:
トランザクション追跡のコンポーネント クランプ サイズが大きくなると、トランザクション追跡に必要なメモリも増えます。適切な場合、Enterprise Manager のメモリの不足を防ぐために、JVM の最大ヒープ サイズを調整します。
プロセスにまたがるトランザクション追跡
CA APM では、一意の識別子(相関 ID)を使用して、追跡したフロントエンド トランザクションおよびバックエンド トランザクションがリンクされます。この順序は、トランザクション内でフロントエンドがバックエンドをコールする順番に基づいています。複数のスタック表示がビューアに表示される場合、Introscope は、選択した追跡イベントに関連するプロセスを検出して追跡しています。異なるエージェントで追跡されたプロセスは、グレー表示された異なる領域に表示されます。トランザクション追跡でリンクされたコンポーネントを調べることによって、プロセスまたは JVM にまたがるトランザクションを確認できます。たとえば、特定のトランザクションがあるプロセスから離れて、別のプロセスに入っているかどうかを確認します。また、遅いトランザクションやストールしたトランザクションのソースが、どの呼び出しであるかを推測できます。
トランザクション追跡データ コレクションの拡張
たとえば次のような追加のトランザクション追跡データも取得するように、Introscope Transaction Tracer を設定することができます。
  • サーブレット呼び出しや JSP 呼び出しのユーザ ID データ
  • HTTP 要求ヘッダ、要求パラメータ、セッション属性 
これらのデータを取得するには、IntroscopeAgent.profile に条件を定義します。
ユーザ ID データの収集
サーブレット呼び出しや JSP 呼び出しのユーザ ID を識別できるように Java エージェントを設定できます。
以下の手順に従います。
  1. 管理対象アプリケーションでユーザ ID を指定する方法についての情報を入手します。この情報は管理対象アプリケーションを開発したアプリケーション設計者から取得できる可能性があります。
    Introscope Transaction Tracer は、以下の手段のいずれかを使用してユーザ ID を保存している管理対象アプリケーションからであれば、ユーザ ID を取得することができます。
    • HttpServletRequest.getRemoteUser()
    • HttpServletRequest.getHeader
      (String key)
    • HttpSession.getValue
      (String key): 返されるオブジェクトは、
      UserID
      を表すストリングか、
      UserID
      を返す
      toString()
      を備えたオブジェクトです。
  2. IntroscopeAgent.profile で、トランザクション追跡のプロパティを見つけます。これは、「Transaction Tracer Configuration」という見出しの下にあります。
  3. 管理対象アプリケーションでユーザ ID の保存に使用されているメソッドに対応するプロパティを設定します。
    注:
    不適切なプロパティが使用されないように 1 つまたは 1 組のプロパティのみコメント化を解除してください。
  4. HttpServletRequest.getRemoteUser()
    が使用されている場合は、以下のプロパティのコメント化を解除します。
    introscope.agent.transactiontracer.userid.method=HttpServletRequest.getRemoteUser
  5. HttpServletRequest.getHeader
    (String key) が使用されている場合は、以下の 1 対のプロパティのコメント化を解除し、2 番目のプロパティにキー ストリングを定義します。
    introscope.agent.transactiontracer.userid.method=HttpServletRequest.getHeader
    introscope.agent.transactiontracer.userid.key=<application defined key string>
  6. HttpSession.getValue
    (String key) が使用されている場合は、以下の 1 対のプロパティのコメント化を解除し、2 番目のプロパティにキー ストリングを定義します。
    introscope.agent.transactiontracer.userid.method=HttpSession.getValue
    introscope.agent.transactiontracer.userid.key=<application defined key string>
サーブレット要求データの収集
Introscope を使用して、ユーザ定義のパラメータに一致するトランザクション追跡データを収集することが可能です。たとえば、HTTP 要求ヘッダにユーザ エージェント(User-Agent)情報を含むトランザクションのトランザクション追跡データを、エージェントで収集するように設定することができます。
Introscope では、以下のサーブレット http 要求情報を記録できます。
  • 要求ヘッダ
  • 要求パラメータ
  • セッション属性
以下の手順に従います。
  1. IntroscopeAgent.profile,
    で、トランザクション追跡のプロパティを見つけます。これは、「Transaction Tracer Configuration」という見出しの下にあります。
  2. トランザクション追跡データの収集対象にする HTTP 要求ヘッダを指定する場合は、以下のプロパティのコメント化を解除します。カンマ区切りリストで、追跡する HTTP 要求ヘッダを指定します。
    introscope.agent.transactiontracer.parameter.httprequest.headers=User-Agent
  3. トランザクション追跡データの収集対象にする HTTP 要求パラメータを指定する場合は、以下のプロパティのコメント化を解除します。追跡する HTTP 要求パラメータをカンマ区切りのリストの形式で指定します。
    introscope.agent.transactiontracer.parameter.httprequest.parameters=parameter1,parameter2
  4. データ追跡の対象にする HTTP セッション属性を指定する場合は、以下のプロパティのコメント化を解除します。追跡する HTTP セッション属性をカンマ区切りのリストの形式で指定します。
    introscope.agent.transactiontracer.parameter.httpsession.attributes=cartID,deptID
  5. 管理対象アプリケーションを再起動します。
セッション ID の収集の設定
introscope.agent.transactiontracer.parameter.capture.sessionid
プロパティは、
TransactionTracer Data
内のセッション ID の収集を有効または無効にします。デフォルトでは、このプロパティは有効で、
TransactionTracer Data
内に記録されます。このプロパティを無効にすると、フィルタにデータを使用できません。
以下の手順に従います。
  1. IntroscopeAgent.profile ファイルをテキスト エディタで開きます。
    以下の行を探します。
    # Uncomment the following property to disable sessionid capture in TransactionTracer data.
    # By default, it is enabled and recorded in the TT Data.
     
    # introscope.agent.transactiontracer.parameter.capture.sessionid=true
  2. 指示に従って行をコメント化またはコメント化解除することで、プロパティを有効または無効にします。
    # introscope.agent.transactiontracer.parameter.capture.sessionid=true
  3. ファイルを保存して閉じ、エージェントを再起動します。
    エージェント設定で、セッション ID を収集するために指定した値が使用されます。
コンポーネント ストール レポートの設定
Application Performance Management のストールは、プローブされたコンポーネントから定義時間内に応答がない状態を表します。デフォルトでは、Introscope エージェントはこの状態を検出し、ストール メトリックをレポートします。
エージェントがストールを確認する度に、メソッド スタックの最上位にあるインスツルメントされたコンポーネントがすべて確認されます。コンポーネントがストールした場合、ストール メトリックおよびストール スナップショット(ストールのエラー スナップショット)が作成されます。ストール メトリックは、ダウンストリーム監視をサブスクライブする各コンポーネントに対しても作成されます。
ストール メトリックは、メソッド スタックの最上位のインスツルメントされたコンポーネントに対してまず作成されます。これらのメトリックは、
introscope.agent.stalls.thresholdseconds
値より長くかかるコンポーネントに対して作成されます。
ダウンストリーム サブスクライバ コンポーネントのストール
ダウンストリーム監視をサブスクライブするコンポーネントが、ストールしているダウンストリーム コンポーネントを呼び出すとストールが発生します。
デフォルトでは、以下のコンポーネントがダウンストリーム ストール監視をサブスクライブします。
  • FrontendTracer
    でプローブされるコンポーネント
  • BackendTracer
    でプローブされるコンポーネント
  • WebServiceBlamepointTracer@Servicelevel
    でプローブされるコンポーネント
  • WebServiceBlamepointTracer@Opertationlevel
    でプローブされるコンポーネント
フロントエンド コンポーネントは、ストールしているバックエンド コンポーネントを呼び出す Web サービスを呼び出します。
フロントエンド --> Web サービス --> バックエンド
ストール メトリックは、バックエンド、Web サービス、およびフロントエンド コンポーネントに対して作成されます。デフォルトでは、これらすべてのコンポーネントがダウンストリーム監視をサブスクライブします。
アップストリーム継承コンポーネントのストール
ストール チェッカは、まずコンポーネント スタックの最上位のメンバがストールしているかどうかを確認します。最上位のコンポーネントがストールしていない場合、ストール チェッカはストールしている親コンポーネントを探します。親がストールしている場合、スタック内の該当コンポーネントおよびアップストリームの各親に対してストール メトリックが作成されます。
コンポーネント M1() が複数のコンポーネント M2() を呼び出し、それぞれに数秒しかかからない場合でも、ストール メトリックが M1() に対してレポートされる場合があります。
例:
ストールしきい値は、15 秒に設定されています。メソッド M1() は、メソッド M2() を 100 回のループで呼び出します。応答にはわずか 2 秒しかかからないので、M2() はストールしません。ただし、M1() は結果的にストールします。
イベントとしてのストールのキャプチャの無効化
Introscope では、デフォルトで、トランザクション ストールをトランザクション イベント データベース内のイベントとしてキャプチャし、ストール メトリックを生成します。ストール メトリックは、トランザクションの最初と最後のメソッドで生成されます。ユーザは、ストール イベントと関連付けられているメトリックを Workstation の履歴イベント ビューアで表示できます。
注:
生成されたストール メトリックをいつでも利用できますが、ストール イベントは Error Detector がインストールされている場合にのみ表示されます。ストールは、通常のエラーとして保存されます。ストールは、[エラー]タブに表示されます。または
type:errorsnapshot
のクエリによって[履歴クエリ ビューア]に表示されます。
イベントとしてのストールのキャプチャを無効にするには、ストールしきい値を変更するか、またはエージェントがストールをチェックする頻度を変更します。以下のプロパティは実行時に設定することができ、変更は自動的に反映されます。
  • introscope.agent.stalls.thresholdseconds
    トランザクションがストールしていると見なされる応答時間しきい値の最小値を指定します。Stall Count メトリックの精度を確保するために、ストールのしきい値を 15 秒以上に設定してください。この設定により、Enterprise Manager が収集サイクルを完了する時間を確保できます。
    デフォルト:
    30 秒
  • introscope.agent.stalls.resolutionseconds
    エージェントがストールをチェックする頻度を指定します。Stall Count メトリックの精度を確保するために、ストールの精度を 10 秒未満に設定しないでください。この設定により、Enterprise Manager が収集サイクルを完了する時間を確保できます。
    デフォルト:
    10 秒