OpenTelemetry Migrazione a Java - AWS X-Ray

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

OpenTelemetry Migrazione a Java

Questa sezione fornisce indicazioni sulla migrazione dall'SDK X-Ray all'SDK per le applicazioni SDK OpenTelemetry for Java.

Soluzione di strumentazione automatica a codice zero

With X-Ray Java agent

Per abilitare l'agente X-Ray Java, era necessario modificare gli argomenti JVM dell'applicazione.

-javaagent:/path-to-disco/disco-java-agent.jar=pluginPath=/path-to-disco/disco-plugins
With OpenTelemetry-based Java agent

Per utilizzare agenti Java OpenTelemetry basati.

  • Utilizzate l'agente Java AWS Distro for OpenTelemetry (ADOT) Auto-Instrumentation per la strumentazione automatica con l'agente Java ADOT. Per ulteriori informazioni, vedete Auto-Instrumentation for Traces and Metrics with the Java agent. Se desideri solo tracciare, disabilita la variabile di OTEL_METRICS_EXPORTER=none ambiente per esportare le metriche dall'agente Java.

    (Facoltativo) È inoltre possibile abilitare CloudWatch Application Signals durante la strumentazione automatica delle applicazioni AWS con la strumentazione automatica ADOT Java per monitorare lo stato attuale delle applicazioni e tenere traccia delle prestazioni delle applicazioni a lungo termine. Application Signals offre una visione unificata e incentrata sulle applicazioni delle applicazioni, dei servizi e delle dipendenze e aiuta a monitorare e valutare lo stato delle applicazioni. Per ulteriori informazioni, consulta Application Signals.

  • Utilizzate l'agente Java per la strumentazione automatica. OpenTelemetry Per ulteriori informazioni, vedete Strumentazione a codice zero con Java Agent.

Soluzioni di strumentazione manuale con SDK

Tracing setup with X-Ray SDK

Per strumentare il codice con X-Ray SDK for Java, prima era necessario configurare la AWSXRay classe con plug-in di servizio e regole di campionamento locali, quindi è stato utilizzato un registratore fornito.

static { AWS XRayRecorderBuilder builder = AWS XRayRecorderBuilder.standard().withPlugin(new EC2Plugin()).withPlugin(new ECSPlugin()); AWS XRay.setGlobalRecorder(builder.build()); }
Tracing setup with OpenTelemetry SDK

Sono richieste le seguenti dipendenze.

<dependencyManagement> <dependencies> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-bom</artifactId> <version>1.49.0</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>io.opentelemetry.instrumentation</groupId> <artifactId>opentelemetry-instrumentation-bom</artifactId> <version>2.15.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-sdk</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-api</artifactId> </dependency> <dependency> <groupId>io.opentelemetry.semconv</groupId> <artifactId>opentelemetry-semconv</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-exporter-otlp</artifactId> </dependency> <dependency> <groupId>io.opentelemetry.contrib</groupId> <artifactId>opentelemetry-aws-xray</artifactId> <version>1.46.0</version> </dependency> <dependency> <groupId>io.opentelemetry.contrib</groupId> <artifactId>opentelemetry-aws-xray-propagator</artifactId> <version>1.46.0-alpha</version> </dependency> <dependency> <groupId>io.opentelemetry.contrib</groupId> <artifactId>opentelemetry-aws-resources</artifactId> <version>1.46.0-alpha</version> </dependency> </dependencies>

Configura l' OpenTelemetry SDK creando un'istanza TracerProvider e registrando globalmente un oggetto. OpenTelemetrySdk Configura questi componenti:

  • Un OTLP Span Exporter (ad esempio, OtlpGrpcSpanExporter): necessario per esportare le tracce verso l'agente o il raccoglitore CloudWatch OpenTelemetry

  • Un propagatore AWS a raggi X: necessario per propagare il Trace Context ai AWS servizi integrati con X-Ray

  • Un campionatore remoto AWS a raggi X: necessario se è necessario campionare le richieste utilizzando le regole di campionamento a raggi X

  • Resource Detectors (ad esempio, EcsResource o Ec2Resource): rilevano i metadati dell'host che esegue l'applicazione

    import io.opentelemetry.api.common.Attributes; import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.contrib.aws.resource.Ec2Resource; import io.opentelemetry.contrib.aws.resource.EcsResource; import io.opentelemetry.contrib.awsxray.AwsXrayRemoteSampler; import io.opentelemetry.contrib.awsxray.propagator.AwsXrayPropagator; import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.sdk.trace.export.BatchSpanProcessor; import io.opentelemetry.sdk.trace.samplers.Sampler; import static io.opentelemetry.semconv.ServiceAttributes.SERVICE_NAME; // ... private static final Resource otelResource = Resource.create(Attributes.of(SERVICE_NAME, "YOUR_SERVICE_NAME")) .merge(EcsResource.get()) .merge(Ec2Resource.get()); private static final SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder() .addSpanProcessor(BatchSpanProcessor.create( OtlpGrpcSpanExporter.getDefault() )) .addResource(otelResource) .setSampler(Sampler.parentBased( AwsXrayRemoteSampler.newBuilder(otelResource).build() )) .build(); // Globally registering a TracerProvider makes it available throughout the application to create as many Tracers as needed. private static final OpenTelemetrySdk openTelemetry = OpenTelemetrySdk.builder() .setTracerProvider(sdkTracerProvider) .setPropagators(ContextPropagators.create(AwsXrayPropagator.getInstance())) .buildAndRegisterGlobal();

Tracciamento delle richieste in arrivo (strumentazione Spring Framework)

With X-Ray SDK

Per informazioni su come utilizzare X-Ray SDK con il framework Spring per strumentare l'applicazione, consulta AOP with Spring e X-Ray SDK for Java. Per abilitare AOP in Spring, completa questi passaggi.

With OpenTelemetry SDK

OpenTelemetry fornisce librerie di strumentazione per raccogliere tracce per le richieste in arrivo per le applicazioni Spring Boot. Per abilitare la strumentazione Spring Boot con una configurazione minima, includi la seguente dipendenza.

<dependency> <groupId>io.opentelemetry.instrumentation</groupId> <artifactId>opentelemetry-spring-boot-starter</artifactId> </dependency>

Per ulteriori informazioni su come abilitare e configurare la strumentazione Spring Boot per la OpenTelemetry configurazione, vedere Guida introduttiva. OpenTelemetry

Using OpenTelemetry-based Java agents

Il metodo predefinito consigliato per strumentare le applicazioni Spring Boot consiste nell'utilizzare l'agente OpenTelemetry Java con strumentazione bytecode, che fornisce anche più out-of-the-box strumentazioni e configurazioni rispetto all'utilizzo diretto dell'SDK. Soluzione di strumentazione automatica a codice zeroPer iniziare, consulta.

AWS Strumentazione SDK v2

With X-Ray SDK

L'X-Ray SDK for Java è in grado di strumentare automaticamente tutti i client AWS SDK v2 quando aggiungi il sottomodulo nella build. aws-xray-recorder-sdk-aws-sdk-v2-instrumentor

Per strumentare le chiamate dei client a valle dei singoli client ai AWS servizi con AWS SDK for Java 2.2 e versioni successive, aws-xray-recorder-sdk-aws-sdk-v2-instrumentor il modulo dalla configurazione di build è stato escluso e aws-xray-recorder-sdk-aws-sdk-v2 il modulo è stato incluso. I singoli client sono stati strumentati configurandoli con un. TracingInterceptor

import com.amazonaws.xray.interceptors.TracingInterceptor; import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration import software.amazon.awssdk.services.dynamodb.DynamoDbClient; //... public class MyModel { private DynamoDbClient client = DynamoDbClient.builder() .region(Region.US_WEST_2) .overrideConfiguration( ClientOverrideConfiguration.builder() .addExecutionInterceptor(new TracingInterceptor()) .build() ) .build(); //...
With OpenTelemetry SDK

Per strumentare automaticamente tutti i client AWS SDK, aggiungi il sottomodulo. opentelemetry-aws-sdk-2.2-autoconfigure

<dependency> <groupId>io.opentelemetry.instrumentation</groupId> <artifactId>opentelemetry-aws-sdk-2.2-autoconfigure</artifactId> <version>2.15.0-alpha</version> <scope>runtime</scope> </dependency>

Per strumentare i singoli client AWS SDK, aggiungi il sottomodulo. opentelemetry-aws-sdk-2.2

<dependency> <groupId>io.opentelemetry.instrumentation</groupId> <artifactId>opentelemetry-aws-sdk-2.2</artifactId> <version>2.15.0-alpha</version> <scope>compile</scope> </dependency>

Quindi, registra un interceptor durante la creazione di un client SDK. AWS

import io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkTelemetry; // ... AwsSdkTelemetry telemetry = AwsSdkTelemetry.create(openTelemetry); private final S3Client S3_CLIENT = S3Client.builder() .overrideConfiguration(ClientOverrideConfiguration.builder() .addExecutionInterceptor(telemetry.newExecutionInterceptor()) .build()) .build();

Analisi delle chiamate HTTP in uscita

With X-Ray SDK

Per strumentare le richieste HTTP in uscita con X-Ray, era necessario l'X-Ray SDK per la versione di Apache di Java. HttpClient

import com.amazonaws.xray.proxies.apache.http.HttpClientBuilder; ... public String randomName() throws IOException { CloseableHttpClient httpclient = HttpClientBuilder.create().build();
With OpenTelemetry SDK

Analogamente a X-Ray Java SDK, OpenTelemetry fornisce una ApacheHttpClientTelemetry classe con un metodo builder che consente la creazione di un'istanza di un set HttpClientBuilder per fornire intervalli OpenTelemetry basati e propagazione del contesto per Apache. HttpClient

<dependency> <groupId>io.opentelemetry.instrumentation</groupId> <artifactId>opentelemetry-apache-httpclient-5.2</artifactId> <version>2.15.0-alpha</version> <scope>compile</scope> </dependency>

Di seguito è riportato un esempio di codice tratto da. opentelemetry-java-instrumentation Il client HTTP fornito da newHttpClient () genererà tracce per le richieste eseguite.

import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.apachehttpclient.v5_2.ApacheHttpClientTelemetry; import org.apache.hc.client5.http.classic.HttpClient; import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; public class ApacheHttpClientConfiguration { private OpenTelemetry openTelemetry; public ApacheHttpClientConfiguration(OpenTelemetry openTelemetry) { this.openTelemetry = openTelemetry; } // creates a new http client builder for constructing http clients with open telemetry instrumentation public HttpClientBuilder createBuilder() { return ApacheHttpClientTelemetry.builder(openTelemetry).build().newHttpClientBuilder(); } // creates a new http client with open telemetry instrumentation public HttpClient newHttpClient() { return ApacheHttpClientTelemetry.builder(openTelemetry).build().newHttpClient(); } }

Supporto strumentale per altre librerie

Trova l'elenco completo delle strumentazioni di libreria supportate per OpenTelemetry Java nel rispettivo GitHub repository di strumentazione, in Librerie, framework, server di applicazioni supportati e. JVMs

In alternativa, puoi cercare nel OpenTelemetry Registro per scoprire se supporta la strumentazione. OpenTelemetry Per iniziare la ricerca, vedi Registro.

Creazione manuale dei dati di traccia

With X-Ray SDK

Con X-Ray SDK, sono necessari i beginSubsegment metodi beginSegment and per creare manualmente segmenti e sottosegmenti X-Ray.

Segment segment = xrayRecorder.beginSegment("ManualSegment"); segment.putAnnotation("annotationKey", "annotationValue"); segment.putMetadata("metadataKey", "metadataValue"); try { Subsegment subsegment = xrayRecorder.beginSubsegment("ManualSubsegment"); subsegment.putAnnotation("key", "value"); // Do something here } catch (Exception e) { subsegment.addException(e); } finally { xrayRecorder.endSegment(); }
With OpenTelemetry SDK

È possibile utilizzare intervalli personalizzati per monitorare le prestazioni delle attività interne che non vengono acquisite dalle librerie di strumentazione. Nota che solo i server di tipo span vengono convertiti in segmenti X-Ray, tutti gli altri span vengono convertiti in sottosegmenti X-Ray.

Innanzitutto, è necessario creare un Tracer per generare intervalli, che è possibile ottenere tramite il metodo. openTelemetry.getTracer Ciò fornirà un'istanza Tracer tra quelle registrate globalmente nell'esempio. TracerProvider Soluzioni di strumentazione manuale con SDK È possibile creare tutte le istanze Tracer necessarie, ma è comune avere una sola istanza Tracer per un'intera applicazione.

Tracer tracer = openTelemetry.getTracer("my-app");

È possibile utilizzare Tracer per creare intervalli.

import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.Scope; ... // SERVER span will become an X-Ray segment Span span = tracer.spanBuilder("get-token") .setKind(SpanKind.SERVER) .setAttribute("key", "value") .startSpan(); try (Scope ignored = span.makeCurrent()) { span.setAttribute("metadataKey", "metadataValue"); span.setAttribute("annotationKey", "annotationValue"); // The following ensures that "annotationKey: annotationValue" is an annotation in X-Ray raw data. span.setAttribute(AttributeKey.stringArrayKey("aws.xray.annotations"), List.of("annotationKey")); // Do something here } span.end();

Gli intervalli hanno un tipo predefinito di INTERNAL.

// Default span of type INTERNAL will become an X-Ray subsegment Span span = tracer.spanBuilder("process-header") .startSpan(); try (Scope ignored = span.makeCurrent()) { doProcessHeader(); }

Aggiungere annotazioni e metadati alle tracce con SDK OpenTelemetry

Nell'esempio precedente, il setAttribute metodo viene utilizzato per aggiungere attributi a ogni intervallo. Per impostazione predefinita, tutti gli attributi span verranno convertiti in metadati nei dati grezzi X-Ray. Per garantire che un attributo venga convertito in un'annotazione e non in metadati, l'esempio precedente aggiunge la chiave di quell'attributo all'elenco dell'attributo. aws.xray.annotations Per ulteriori informazioni, consulta Abilitare le annotazioni e le annotazioni a raggi X personalizzate e i metadati.

Con agenti Java basati OpenTelemetry

Se si utilizza l'agente Java per strumentare automaticamente l'applicazione, è necessario eseguire la strumentazione manuale nell'applicazione. Ad esempio, al codice dello strumento all'interno dell'applicazione per sezioni che non sono coperte da alcuna libreria di strumentazione automatica.

Per eseguire la strumentazione manuale con l'agente, è necessario utilizzare l'artefatto. opentelemetry-api La versione dell'artefatto non può essere più recente della versione dell'agente.

import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.Span; // ... Span parentSpan = Span.current(); Tracer tracer = GlobalOpenTelemetry.getTracer("my-app"); Span span = tracer.spanBuilder("my-span-name") .setParent(io.opentelemetry.context.Context.current().with(parentSpan)) .startSpan(); span.end();

Strumentazione Lambda

With X-Ray SDK

Utilizzando l'SDK X-Ray, dopo che Lambda ha abilitato l'Active Tracing, non è richiesta alcuna configurazione aggiuntiva per utilizzare l'SDK X-Ray. Lambda creerà un segmento che rappresenta l'invocazione del gestore Lambda e potrai creare sottosegmenti o librerie di strumenti utilizzando l'SDK X-Ray senza alcuna configurazione aggiuntiva.

With OpenTelemetry-based solutions

Strumentazione automatica Lambda: puoi strumentare automaticamente la tua Lambda AWS con strati Lambda venduti utilizzando le seguenti soluzioni:

  • CloudWatch Segnali applicativi Lambda layer (consigliato)

    Nota

    Questo livello Lambda dispone di CloudWatch Application Signals abilitati per impostazione predefinita, il che consente il monitoraggio delle prestazioni e dello stato dell'applicazione Lambda raccogliendo sia metriche che tracce. Per il semplice tracciamento, imposta la variabile di ambiente Lambda. OTEL_AWS_APPLICATION_SIGNALS_ENABLED=false

    • Consente il monitoraggio delle prestazioni e dello stato dell'applicazione Lambda

    • Per impostazione predefinita, raccoglie sia le metriche che le tracce

  • AWS layer Lambda gestito per ADOT Java. Per ulteriori informazioni, consulta AWS Distro for OpenTelemetry Lambda Support For Java.

Per utilizzare la strumentazione manuale insieme al livello di strumentazione automatica, vedere. Soluzioni di strumentazione manuale con SDK Per ridurre gli avviamenti a freddo, prendi in considerazione OpenTelemetry l'utilizzo di strumentazione manuale per generare OpenTelemetry tracce per la tua funzione Lambda.

OpenTelemetry strumentazione manuale per Lambda AWS

Considera il seguente codice di funzione Lambda che effettua una chiamata Amazon ListBuckets S3.

package example; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.ListBucketsRequest; import software.amazon.awssdk.services.s3.model.ListBucketsResponse; import software.amazon.awssdk.services.s3.model.S3Exception; public class ListBucketsLambda implements RequestHandler<String, String> { private final S3Client S3_CLIENT = S3Client.builder() .build(); @Override public String handleRequest(String input, Context context) { try { ListBucketsResponse response = makeListBucketsCall(); context.getLogger().log("response: " + response.toString()); return "Success"; } catch (Exception e) { throw new RuntimeException(e); } } private ListBucketsResponse makeListBucketsCall() { try { ListBucketsRequest listBucketsRequest = ListBucketsRequest.builder() .build(); ListBucketsResponse response = S3_CLIENT.listBuckets(listBucketsRequest); return response; } catch (S3Exception e) { throw new RuntimeException("Failed to call S3 listBuckets" + e.awsErrorDetails().errorMessage(), e); } } }

Ecco le dipendenze.

dependencies { implementation('com.amazonaws:aws-lambda-java-core:1.2.3') implementation('software.amazon.awssdk:s3:2.28.29') implementation('org.slf4j:slf4j-nop:2.0.16') }

Per strumentare manualmente il tuo gestore Lambda e il client Amazon S3, procedi come segue.

  1. Sostituisci le classi di funzioni che implementano RequestHandler (o RequestStreamHandler) con quelle che estendono TracingRequestHandler (o). TracingRequestStreamHandler

  2. Crea un'istanza TracerProvider e registra globalmente un OpenTelemetrySdk oggetto. Si TracerProvider consiglia di configurarlo con:

    1. Un Simple Span Processor con un X-Ray UDP Span Exporter per inviare tracce all'endpoint UDP X-Ray di Lambda

    2. Un campionatore sempre attivo (predefinito se non configurato ParentBased )

    3. Una risorsa con service.name impostato sul nome della funzione Lambda

    4. Un propagatore Lambda a raggi X

  3. Modificate il handleRequest metodo doHandleRequest e passate l'OpenTelemetrySdkoggetto alla classe base.

  4. Strumenta il client Amazon S3 con la strumentazione OpenTemetry AWS SDK registrando l'interceptor durante la creazione del client.

Sono OpenTelemetry necessarie le seguenti dipendenze correlate.

dependencies { ... implementation("software.amazon.distro.opentelemetry:aws-distro-opentelemetry-xray-udp-span-exporter:0.1.0") implementation(platform('io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.14.0')) implementation(platform('io.opentelemetry:opentelemetry-bom:1.48.0')) implementation('io.opentelemetry:opentelemetry-sdk') implementation('io.opentelemetry:opentelemetry-api') implementation('io.opentelemetry.contrib:opentelemetry-aws-xray-propagator:1.45.0-alpha') implementation('io.opentelemetry.contrib:opentelemetry-aws-resources:1.45.0-alpha') implementation('io.opentelemetry.instrumentation:opentelemetry-aws-lambda-core-1.0:2.14.0-alpha') implementation('io.opentelemetry.instrumentation:opentelemetry-aws-sdk-2.2:2.14.0-alpha') }

Il codice seguente illustra la funzione Lambda dopo le modifiche richieste. È possibile creare intervalli personalizzati aggiuntivi per completare gli intervalli forniti automaticamente.

package example; import java.time.Duration; import com.amazonaws.services.lambda.runtime.Context; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.contrib.aws.resource.LambdaResource; import io.opentelemetry.contrib.awsxray.propagator.AwsXrayLambdaPropagator; import io.opentelemetry.instrumentation.awslambdacore.v1_0.TracingRequestHandler; import io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkTelemetry; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor; import io.opentelemetry.sdk.trace.samplers.Sampler; import static io.opentelemetry.semconv.ServiceAttributes.SERVICE_NAME; import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.ListBucketsRequest; import software.amazon.awssdk.services.s3.model.ListBucketsResponse; import software.amazon.awssdk.services.s3.model.S3Exception; import software.amazon.distro.opentelemetry.exporter.xray.udp.trace.AwsXrayUdpSpanExporterBuilder; public class ListBucketsLambda extends TracingRequestHandler<String, String> { private static final Resource lambdaResource = LambdaResource.get(); private static final SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder() .addSpanProcessor(SimpleSpanProcessor.create( new AwsXrayUdpSpanExporterBuilder().build() )) .addResource( lambdaResource .merge(Resource.create(Attributes.of(SERVICE_NAME, System.getenv("AWS_LAMBDA_FUNCTION_NAME")))) ) .setSampler(Sampler.parentBased(Sampler.alwaysOn())) .build(); private static final OpenTelemetrySdk openTelemetry = OpenTelemetrySdk.builder() .setTracerProvider(sdkTracerProvider) .setPropagators(ContextPropagators.create(AwsXrayLambdaPropagator.getInstance())) .buildAndRegisterGlobal(); private static final AwsSdkTelemetry telemetry = AwsSdkTelemetry.create(openTelemetry); private final S3Client S3_CLIENT = S3Client.builder() .overrideConfiguration(ClientOverrideConfiguration.builder() .addExecutionInterceptor(telemetry.newExecutionInterceptor()) .build()) .build(); public ListBucketsLambda() { super(openTelemetry, Duration.ofMillis(0)); } @Override public String doHandleRequest(String input, Context context) { try { ListBucketsResponse response = makeListBucketsCall(); context.getLogger().log("response: " + response.toString()); return "Success"; } catch (Exception e) { throw new RuntimeException(e); } } private ListBucketsResponse makeListBucketsCall() { try { ListBucketsRequest listBucketsRequest = ListBucketsRequest.builder() .build(); ListBucketsResponse response = S3_CLIENT.listBuckets(listBucketsRequest); return response; } catch (S3Exception e) { throw new RuntimeException("Failed to call S3 listBuckets" + e.awsErrorDetails().errorMessage(), e); } } }

Quando si richiama la funzione Lambda, verrà visualizzata la seguente traccia in Trace Map nella CloudWatch console.

Traccia la mappa nella console CloudWatch .