Download PDF
Download page データコレクタ.
データコレクタ
データコレクタを使用すると、ビジネストランザクションやトランザクション分析データをアプリケーションデータで補足することができます。アプリケーションデータは、ビジネストランザクションのパフォーマンス上の問題に背景情報を付加します。たとえば、パフォーマンス低下の影響を受けるビジネストランザクションの特定のパラメータ値や戻り値を示します。
このようなデータは、特定のユーザ、注文、製品といった、パフォーマンス上の問題によって悪影響を受けるビジネス状況を示します。
データコレクタの種類
データコレクタには次の2つの形式があります。
- メソッド呼び出しデータコレクタは、メソッド引数、変数、戻り値などのコードデータを取得します。
- HTTP データコレクタは、ビジネストランザクションで交換される HTTP メッセージの URL、パラメータ値、ヘッダー、クッキーをキャプチャします。
トランザクション分析でデータコレクタを使用する方法については、「トランザクション分析データの収集」を参照してください。
収集されたデータの表示
ビジネストランザクションに適用されると、データコレクタはトランザクション スナップショットに表示される情報を補足します。HTTP データコレクタによってキャプチャされた情報は [HTTP DATA] と [COOKIES] セクションに表示され、メソッド呼び出しデータは [Business Data] セクションに表示されます。収集されたデータを表示するには、[Transaction Snapshots] ウィンドウに移動します。データを表示するトランザクションをダブルクリックし、[Drill Down] をクリックします。
データコレクタの構成
コールグラフのメソッドの右クリックメニューで、トランザクション スナップショットからデータコレクタを直接追加できます。
その他の方法として、[Configuration] > [Instrumentation] ページから手動で追加することもできます。[Data Collector] タブをクリックし、[Method Invocation Data Collectors] パネルまたは [HTTP Request Data Collectors] パネルの下にある [Add] ボタンをクリックします。
新しいデータコレクタの構成ウィンドウが以下のように表示されます。
データコレクタには、以下に挙げるプラットフォーム固有の考慮事項が適用されるのでご留意ください。
- C/C++ エージェントの場合は、ここで説明するコントローラ UI ではなく、
appd_bt_add_user_data function()
を使用してメソッドデータコレクタを作成できます。「C および C++ のエージェント SDK」を参照してください。 - Node.js エージェントの場合、ここで説明するコントローラ UI ではなく、
addSnapshotData()
Node.js API を使用する場合のみメソッドデータコレクタを作成できます。「Node.jsエージェントAPI参考資料」を参照してください。 - Python エージェントの場合、コントローラ UI ではなく、
add_snapshot_data()
Python API を使用してメソッドデータコレクタを作成できます。「PythonエージェントAPI参考資料」を参照してください。 PHPメソッドデータコレクタにおいては、「with a Class Name that」オプションのみが有効です。また、メソッドデータコレクタはスタンドアロン PHP 関数に追加できません。
データコレクタを構成する一般的な手順は以下のとおりです。
- データを取得する方法を特定。これを行うにはメソッドの署名を定義し、オプションで、メソッド内のコードポイントの値(戻り値や引数など)に基づいてフィルタを定義します。
- データのソースとなる実際のコードポイントを指定。
- データコレクタをビジネストランザクションに適用する場合は、該当するビジネストランザクションを選択します。
通常、データコレクタを作成するには、アプリケーションのソースコードまたはドキュメントを参照して、コレクタを設定するコードの知識が必要です。JVM 1.5 や .NET など、いくつかのアプリケーション環境においては、メソッド呼び出しデータコレクタによってインストゥルメンテーション構成(クラス名、メソッド名、メソッドパラメータなど)が変更される場合に、JVM またはアプリケーションサーバを再起動する必要があります。
構成に関する備考
- [Apply to new Business Transactions] オプションは、このコレクタを構成した後に作成されたビジネストランザクションにコレクタを適用します。そうでない場合は、データコレクタは後続のデータコレクタ構成画面で選択したビジネストランザクションのみに適用されます。
- [Class] では、クラス名や実装されているインターフェイス名など、データコレクタがクラスの識別に使用できる一致条件を選択します。クラス名で一致させる場合は、そのアプリケーションプラットフォームに適した完全修飾クラス名を使用します。たとえば、equalsフィールド値の形式は次のようになります。
- Java の場合:
com.appdynamics.model.Item
- .NET の場合:
Bookstore.Item
- PHP の場合:
book
- Java の場合:
Is this Method Overloaded:オーバーロードメソッドの場合は、署名を識別するパラメータを追加します。データをキャプチャするメソッドの各形式にデータコレクタ定義を作成する必要があります。たとえば、次の表のオーバーロードメソッドで 2 番目から 2 つの形式のみでデータをキャプチャするには、2 つのデータコレクタを作成する必要があります。構成するパラメータは次のようになります。
署名 構成するパラメータ getName()
- なし
getName(int studentId)
- パラメータインデックス 0:java.lang.int
getName(int studentId, string name)
- パラメータインデックス 0:java.lang.int
- パラメータインデックス 1:java.lang.String
特定の条件を満たすようメソッドの選択を調整できます。複数の一致条件を構成する場合、データコレクタをリクエストに適用するには、そのリクエストがすべての一致条件を満たしている必要があります。
メソッドを特定したら、メソッドの戻り値や、引数、呼び出されたオブジェクトのGetterチェーンにより取得された値など、データを取得するコードポイントを指定します。このコードポイントは、構成設定の [Specify the Data to Collect from this Method Invocation] セクションで構成します。
HTTP データコレクタは、HTTP パラメータ、リクエスト属性、cookie などからデータをキャプチャできます。Content-Length HTTP ヘッダーは、Average Request Size メトリックとして AppDynamics ですでにキャプチャされていることに注意してください。ただし、このヘッダーのデータコレクタがトランザクション スナップショットに値を表示する構成を選択することもできます。これは、メッセージサイズがパフォーマンスの低下に影響しているかどうかなどの検証に役立ちます。
複数のデータコレクタを構成できます。複数のデータコレクタの効果は累積的です。たとえば、URL HTTP リクエスト属性の収集を行わないカスタムデータコレクタを追加する場合でも、URL が収集されるように構成されているデフォルトの HTTP リクエストデータコレクタ構成を維持すると、URL は収集されます。
Javaデータコレクタの例
この例では、Java アプリケーションでデータコレクタを設定します。次のスニペットに示されるメソッド getCartTotal()
のデータコレクタを、データソースとして後で使用するメソッド getUser()
とともに作成します。
package com.appdynamicspilot.model;
...
public class Cart implements java.io.Serializable {
...
private Double fakeAmount = 0.0;
...
private User user;
...
public User getUser() {
return user;
}
...
public Double getCartTotal() {
if (fakeAmount == 0.0) {
double total = 0;
if (items != null) {
for (Item item : items) {
total += item.getPrice();
}
}
return total;
} return fakeAmount;
}
...
}
このアプリケーションのサンプルデータコレクタを設定するには:
- 完全修飾クラス名と getCartTotal をメソッドとして使用して、メソッドを特定します。
- 戻り値データソースを次のように構成します。
- ソースタイプとして戻り値を選択します。多くの場合、戻り値は
toString()
メソッドを使用して文字列に変換されます。ここでは、戻り値が数値(double
)であるため、Java base パッケージのメソッドを使用して、この数値を long 値に変換できます。 呼び出されたオブジェクトのユーザ名をキャプチャします。Cart クラスは、同じパッケージ内の次のクラスに基づいてユーザオブジェクトを
Cart
としてインスタンス化します。User クラスには、ユーザの名前を返すためのメソッドgetCustomerName()
が含まれていることに注意してください。package com.appdynamicspilot.model; ... public class User implements java.io.Serializable { ... private String customerName = null; ... public String getCustomerName() { return customerName; } public void setCustomerName(String customerName) { this.customerName = customerName; } ... }
CODEGetterチェーンを使用すると、このメソッドを同じデータコレクタ内の別のデータソースとして識別できます。この場合、データソースとして [Invoked Object] を選択します。Getter チェーン
getUser().getCustomerName()
は呼び出されたオブジェクトのオペレーションです。HTTP データコレクタの場合、ユーザ名を HTTP クエリまたはクッキーで変数値(たとえば、userid)として入手できることがあります。同じく、useridのデータコレクタを作成することで、HTTPデータコレクタを使用して遅延トランザクションのトランザクションスナップショットで影響を受けるユーザーを識別できます。
必要に応じて、キャプチャ条件を適用します。サンプルアプリケーションでは、以下のUserクラスのスニペットで示すように、ダイアモンド、プラチナなどといったサービスレベルに対応するタイプ別にユーザーを区別します。
package com.appdynamicspilot.model; public class User implements java.io.Serializable { public enum CUSTOMER_TYPE {DIAMOND,PLATINUM,GOLD,SILVER,BRONZE}; ... public CUSTOMER_TYPE getCustomerType() { return this.customerType; } }
CODEゴールドレベルのユーザのみでユーザ名とカートの合計をキャプチャするには、[Invoked Object] からデータを収集する一致条件を追加し、呼び出されたオブジェクトの操作として以下の Getter チェーンを条件 Equals GOLD に基づいて使用します。
- PHPエージェントでは、MIDCによって収集されたメソッドの戻り値がどの変数にも保存されていない場合、スナップショットと分析データの両方で「null」と表示されます。
遅い、非常に遅い、停滞したトランザクションのトランザクション スナップショットが完了すると、トランザクション スナップショットにはゴールド顧客のユーザ名とカートの合計金額を示すユーザデータが含まれます。
PHP HTTPデータコレクタの例
この例では、HTTP リクエストから情報をキャプチャするための PHP エージェントの構成方法を示します。データコレクタはスタンドアロン PHP 関数に追加できません。
HTTPデータコレクタ構成で、スナップショットに表示するリクエストデータを指定します。
この構成では、2 つの HTTP パラメータ、URL とセッション ID、クッキー名、セッションキー、およびヘッダーをキャプチャします。
トランザクション スナップショットでは、URL とセッション ID が [SUMMARY] タブに表示され、構成済み HTTP パラメータ、セッションキー、およびヘッダーがリクエストメソッド、応答コードとともに [HTTP PARAMS] タブに表示されます。
クッキー名およびクッキー値はCOOKIESタブに表示されます。