トレーサのデフォルトの動作のオーバーライド

関数名およびビジネストランザクション名をカスタマイズするか、コードでトレーサ設定を維持したいときは、AppDynamics.Config.Builder オブジェクトを使用して環境変数をオーバーライドできます。このオプションでは、必要なソースから実行時に値を取得できます。

AppDynamics.Config.Builder configBuilder = new AppDynamics.Config.Builder();
configBuilder.accountName(accountName)
   .applicationName(appName)
   .tierName(tierName)
   .controllerHost(controllerHost)
   .controllerPort(controllerPort)
   .defaultBtName(context.getFunctionName() + "_bt")
   .controllerAccessKey(controllerAccessKey)
   .lambdaContext(context);

自動か手動のインストルメンテーションメソッドに応じて、configBuilder オブジェクトの実装が少し異なります。

自動インストルメンテーション

自動インストルメンテーションは、getConfigBuilder() ファクトリメソッドを実装する MonitoredRequestStreamHandler クラスを使用し、トレーサをインストルメント化します。

このファクトリ方式をオーバーライドし、任意のビルダー方式を使用して環境変数を設定できます。

コードスニペットは、自動インストルメンテーションのコードに変数を入力する方法を示しています。

@Override
public AppDynamics.Config.Builder getConfigBuilder(Context context) {
String controllerHost = System.getenv("APPDYNAMICS_CONTROLLER_HOST");
int controllerPort = Integer.parseInt(System.getenv("APPDYNAMICS_CONTROLLER_PORT"));
String accountName = System.getenv("APPDYNAMICS_ACCOUNT_NAME");
String appName = System.getenv("APPDYNAMICS_APPLICATION_NAME");
String tierName = System.getenv("APPDYNAMICS_TIER_NAME");
String controllerAccessKey = System.getenv("APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY");

AppDynamics.Config.Builder configBuilder = new AppDynamics.Config.Builder();
configBuilder.accountName(accountName)
   .applicationName(appName)
   .tierName(tierName)
   .controllerHost(controllerHost)
   .controllerPort(controllerPort)
   .defaultBtName(context.getFunctionName() + "_bt")
   .controllerAccessKey(controllerAccessKey)
   .lambdaContext(context);
return configBuilder;
  }

手動インストルメンテーション

手動インストルメンテーションでは、AppDynamics.getTracer() メソッドのオーバーロードされたバージョンによってトレーサの設定が構成されます。オーバーロードされたメソッドは、configBuilder オブジェクトを context オブジェクトではなくパラメータとして使い、トレーサをインストルメント化します。

この AppDynamics.getTracer()のバリアントを使用する場合は、 AppDynamics.Config.Builder.lambdaContext() メソッドを介して context オブジェクトを渡す必要があります。

コードスニペットは、手動インストルメンテーションのコードに変数を入力する方法について示しています。

@Override
public void handleRequest(InputStream input, OutputStream output, Context context) throws IOException) {
        String controllerHost = System.getenv("APPDYNAMICS_CONTROLLER_HOST");
        int controllerPort = Integer.parseInt(System.getenv("APPDYNAMICS_CONTROLLER_PORT"));
        String accountName = System.getenv("APPDYNAMICS_ACCOUNT_NAME");
        String appName = System.getenv("APPDYNAMICS_APPLICATION_NAME");
        String tierName = System.getenv("APPDYNAMICS_TIER_NAME");
        String controllerAccessKey = System.getenv("APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY");
        AppDynamics.Config.Builder configBuilder = new AppDynamics.Config.Builder();
        configBuilder.accountName(accountName)
                .applicationName(appName)
                .tierName(tierName)
                .controllerHost(controllerHost)
                .controllerPort(controllerPort)
                .defaultBtName(context.getFunctionName() + "_bt")
                .controllerAccessKey(controllerAccessKey)
                .lambdaContext(context);
        
	//Replace the context object with config.Builder.build()
	Tracer tracer = AppDynamics.getTracer(configBuilder.build());