Download PDF
Download page 自動トレーサ インストゥルメンテーション.
自動トレーサ インストゥルメンテーション
自動トレーサ インストゥルメンテーションは、次の手順で構成されます。
Java サーバレストレーサのインスタンス化
自動インスタンス化は RequestStreamHandler
インターフェイスと互換性があります。他のすべてのインターフェイスでは、手動でのインスタンス化が必要です。
RequestStreamHandler
は、AWS によって提供される事前定義されたハンドラです。詳細については、AWS マニュアルを参照してください。
トレーサを自動的にインスタンス化する場合:
- 現在のハンドラクラスを AppDynamics
MonitoredRequestStreamHandler
に拡張します。 - ハンドラクラスの既存のメソッド
handleMonitoredRequest
の名前を変更します。
package <MyTestPackage>;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
//AppDynamics tracer imports
import com.appdynamics.serverless.tracers.aws.api.AppDynamics;
import com.appdynamics.serverless.tracers.aws.api.MonitoredRequestStreamHandler;
import com.appdynamics.serverless.tracers.aws.api.ExitCall;
import com.appdynamics.serverless.tracers.aws.api.Tracer;
import com.appdynamics.serverless.tracers.aws.api.Transaction;
//Keyword extends makes MonitoredRequestStreamHanlder your project's superclass
public class <MaryHadALittleLambda> extends MonitoredRequestStreamHandler {
@Override
//Change your method to handleMonitoredRequest
public void handleMonitoredRequest(InputStream input, OutputStream output, Context context) throws IOException {
}
// Your AWS Lambda function code starts here, for example
int letter = 0;
while((letter = input.read()) >= 0) {
output.write(Character.toUpperCase(letter));
}
}
(オプション)相関ヘッダーメソッドのオーバーライド
自動インストゥルメンテーションは MonitoredRequestStreamHandler
クラスを使用します。相関ヘッダーを検索するためのデフォルトのロジックが提供されます。
相関ヘッダーにカスタム転送メカニズムを使用する必要がある場合は、getCorrelationHeader()
メソッドでトレーサのデフォルトロジックをオーバーライドする必要があります。トレーサが着信ヘッダーを返せるように、カスタムロジックを挿入して着信相関ヘッダーを検索します。
コードスニペットは、getCorrelationHeader()
メソッドをオーバーライドする方法を示しています。
//(Optional)Override getCorrelationHeader().
//Only override if the tracer will not be able to find a correlation header using its pre-configured logic.
@Override
public String getCorrelationHeader(InputStream input, Context context) {
//Logic to find the inbound header goes here, so the inbound header can be returned
return "correlation-header";
トランザクション オブジェクトの取得
MonitoredRequestStreamHandler
クラスは自動的にトランザクションを作成します。ただし、終了コールで使用する transaction
オブジェクトを取得する必要があります。
次のコードスニペットは transaction
オブジェクトを取得する方法を示しています。
//Obtain your transaction for use with exit calls.
Transaction transaction = getTransaction();
外部終了コールの作成
createExitCall
メソッドは exitCall
オブジェクトを取得するために使用されます。終了コールオブジェクトは、外部終了コールで費やした時間を記録し、ダウンストリーム アクティビティの相関を許可します。
終了コールタイプおよび識別プロパティ
コントローラでは、すべての終了コールに個別のタイプがあり、一連の識別プロパティによって決定されます。
exitCall
タイプおよび識別プロパティを次に示します。
exitCall タイプ | 識別プロパティ |
---|---|
HTTP | HOST PORT URL QUERY STRING |
JDBC | URL HOST PORT データベース VERSION VENDOR |
WEB SERVICE | SERVICE URL OPERATION SOAP ACTION VENDOR |
カスタム | ユーザ定義のプロパティセット |
終了コールの作成
transaction
オブジェクトで createExitCall()
を呼び出します。
次のコード例は、外部終了コールを実行する方法を示しています。
public void makeExitCall(URL url){
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
String outgoingHeader = null;
String callType = null;
Map<String, String> identifyingProperties = new HashMap<>();
//Below properties are appropriate for an inter-AWS Lambda call
identifyingProperties.put("DESTINATION", functionName);
identifyingProperties.put("DESTINATION_TYPE", "LAMBDA");
callType="CUSTOM";
//Below properties are appropriate for an external HTTP call
identifyingProperties.put("HOST", url.getHost());
identifyingProperties.put("PORT", String.valueOf(url.getPort()));
callType="HTTP";
//Define the createExitCall method to obtain an exitCall object.
ExitCall exitCall = transaction.createExitCall(callType, identifyingProperties);
outgoingHeader = exitCall.getCorrelationHeader();
exitCall.start();
try {
// Tracer.APPDYNAMICS_TRANSACTION_CORRELATION_HEADER_KEY is the name of the header that should be set
if (outgoingHeader != null) {
conn.setRequestProperty(Tracer.APPDYNAMICS_TRANSACTION_CORRELATION_HEADER_KEY, outgoingHeader); // set the correlation header on an HttpURLConnection
}
// Make the exit call here
} finally {
exitCall.stop();
}
}
複数の外部終了コールの実行
1 つの AWS Lambda 関数が複数の終了コールを行う場合、各関数は一意の exitCall
オブジェクトによって識別される必要があります。複数の終了コールを行うには、個別の終了コールごとに新しい exitCall
オブジェクトを作成します。exitCall
オブジェクトは再利用できません。
これらのマニュアルで使用されている Amazon Web サービス、AWS ロゴ、AWS、およびその他の AWS マークは、米国およびその他の国における Amazon.com, Inc. またはその関連会社の商標です。