Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Migrasi ke OpenTelemetry Java
Bagian ini memberikan panduan tentang migrasi dari X-Ray SDK ke OpenTelemetry SDK for Java.
Solusi instrumentasi otomatis kode nol
- With X-Ray Java agent
-
Untuk mengaktifkan agen Java X-Ray, argumen JVM aplikasi Anda harus dimodifikasi.
-javaagent:/path-to-disco
/disco-java-agent.jar=pluginPath=/path-to-disco
/disco-plugins
- With OpenTelemetry-based Java agent
-
Untuk menggunakan agen Java OpenTelemetry berbasis.
-
Gunakan AWS Distro for OpenTelemetry (ADOT) Auto-Instrumentation Java agent untuk instrumentasi otomatis dengan agen ADOT Java. Untuk informasi selengkapnya, lihat Instrumentasi Otomatis untuk Jejak dan Metrik dengan agen Java. Jika Anda hanya ingin melacak, nonaktifkan variabel OTEL_METRICS_EXPORTER=none
lingkungan. untuk mengekspor metrik dari agen Java.
(Opsional) Anda juga dapat mengaktifkan Sinyal CloudWatch Aplikasi saat secara otomatis menginstrumentasi aplikasi Anda AWS dengan instrumentasi otomatis ADOT Java untuk memantau kesehatan aplikasi saat ini dan melacak kinerja aplikasi jangka panjang. Application Signals menyediakan tampilan aplikasi yang terpadu dan berpusat pada aplikasi, layanan, dan dependensi Anda, serta membantu memantau dan memonitor kesehatan aplikasi. Untuk informasi selengkapnya, silakan lihat Sinyal Aplikasi.
-
Gunakan agen OpenTelemetry Java untuk instrumentasi otomatis. Untuk informasi selengkapnya, lihat instrumentasi kode nol dengan Agen Java.
Solusi instrumentasi manual dengan SDK
- Tracing setup with X-Ray SDK
-
Untuk menginstruksikan kode Anda dengan X-Ray SDK for Java, pertama, AWSXRay
kelas harus dikonfigurasi dengan plug-in layanan dan aturan pengambilan sampel lokal, kemudian perekam yang disediakan digunakan.
static { AWS XRayRecorderBuilder builder = AWS XRayRecorderBuilder.standard().withPlugin(new EC2Plugin()).withPlugin(new ECSPlugin()); AWS XRay.setGlobalRecorder(builder.build());
}
- Tracing setup with OpenTelemetry SDK
-
Dependensi berikut diperlukan.
<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>
Konfigurasikan OpenTelemetry SDK dengan membuat instance TracerProvider
dan mendaftarkan objek secara global. OpenTelemetrySdk
Konfigurasikan komponen-komponen ini:
Eksportir Rentang OTLP (misalnya, OtlpGrpcSpanExporter) - Diperlukan untuk mengekspor jejak ke agen atau Kolektor CloudWatch OpenTelemetry
-
Propagator AWS X-Ray — Diperlukan untuk menyebarkan Konteks Jejak ke AWS Layanan yang terintegrasi dengan X-Ray
-
Sampler Jarak Jauh AWS X-Ray - Diperlukan jika Anda perlu mengambil sampel permintaan menggunakan Aturan Pengambilan Sampel Sinar-X
Detektor Sumber Daya (misalnya, EcsResource atau Ec2Resource) - Deteksi metadata host yang menjalankan aplikasi Anda
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();
Menelusuri permintaan yang masuk (instrumentasi kerangka pegas)
- With X-Ray SDK
-
Untuk informasi tentang cara menggunakan X-Ray SDK dengan framework pegas untuk instrumen aplikasi Anda, lihat AOP dengan Spring dan X-Ray SDK for Java. Untuk mengaktifkan AOP di Musim Semi, selesaikan langkah-langkah ini.
- With OpenTelemetry SDK
OpenTelemetry menyediakan pustaka instrumentasi untuk mengumpulkan jejak permintaan masuk untuk aplikasi Spring Boot. Untuk mengaktifkan instrumentasi Spring Boot dengan konfigurasi minimal, sertakan ketergantungan berikut.
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-spring-boot-starter</artifactId>
</dependency>
Untuk informasi selengkapnya tentang cara mengaktifkan dan mengonfigurasi instrumentasi Spring Boot untuk OpenTelemetry penyiapan Anda, lihat OpenTelemetry Memulai.
- Using OpenTelemetry-based Java agents
Metode default yang direkomendasikan untuk menginstrumentasi aplikasi Spring Boot adalah dengan menggunakan agen OpenTelemetry Java dengan instrumentasi bytecode, yang juga menyediakan lebih banyak out-of-the-box instrumentasi dan konfigurasi jika dibandingkan dengan langsung menggunakan SDK. Untuk memulai, lihatSolusi instrumentasi otomatis kode nol.
AWS Instrumentasi SDK v2
- With X-Ray SDK
-
X-Ray SDK for Java dapat secara otomatis AWS menginstruksikan semua klien SDK v2 saat Anda menambahkan sub-modul aws-xray-recorder-sdk-aws-sdk-v2-instrumentor
dalam build Anda.
Untuk menginstrumentasikan panggilan klien hilir klien individual ke AWS layanan dengan AWS SDK for Java 2.2 dan yang lebih baru, aws-xray-recorder-sdk-aws-sdk-v2-instrumentor
modul dari konfigurasi build Anda dikecualikan dan aws-xray-recorder-sdk-aws-sdk-v2
modul disertakan. Klien individu diinstrumentasi dengan mengonfigurasinya dengan a. 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
-
Untuk menginstruksikan semua klien AWS SDK secara otomatis, tambahkan opentelemetry-aws-sdk-2.2-autoconfigure
sub-modul.
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-aws-sdk-2.2-autoconfigure</artifactId>
<version>2.15.0-alpha</version>
<scope>runtime</scope>
</dependency>
Untuk menginstrumentasikan klien AWS SDK individual, tambahkan opentelemetry-aws-sdk-2.2
sub-modul.
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-aws-sdk-2.2</artifactId>
<version>2.15.0-alpha</version>
<scope>compile</scope>
</dependency>
Kemudian, daftarkan pencegat saat membuat Klien AWS SDK.
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();
Instrumentasi panggilan HTTP keluar
- With X-Ray SDK
-
Untuk instrumen permintaan HTTP keluar dengan X-Ray, X-Ray SDK untuk Apache HttpClient versi Java diperlukan.
import com.amazonaws.xray.proxies.apache.http.HttpClientBuilder;
...
public String randomName() throws IOException {
CloseableHttpClient httpclient = HttpClientBuilder.create().build();
- With OpenTelemetry SDK
-
Demikian pula dengan X-Ray Java SDK, OpenTelemetry menyediakan ApacheHttpClientTelemetry
kelas yang memiliki metode pembangun yang memungkinkan pembuatan instance dari sebuah HttpClientBuilder
untuk menyediakan rentang OpenTelemetry berbasis dan propagasi konteks untuk 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>
Berikut ini adalah contoh kode dari opentelemetry-java-instrumentation. Klien HTTP yang disediakan oleh newHttpClient () akan menghasilkan jejak untuk permintaan yang dieksekusi.
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();
}
}
Dukungan instrumentasi untuk perpustakaan lain
Temukan daftar lengkap instrumentasi Library yang didukung untuk OpenTelemetry Java di GitHub repositori instrumentasi masing-masing, di bawah Pustaka yang didukung, kerangka kerja, server aplikasi, dan. JVMs
Atau, Anda dapat mencari OpenTelemetry Registry untuk mengetahui apakah OpenTelemetry mendukung instrumentasi. Untuk mulai mencari, lihat Registry.
Membuat data jejak secara manual
- With X-Ray SDK
-
Dengan X-Ray SDK, beginSubsegment
metode beginSegment
dan metode diperlukan untuk secara manual membuat segmen X-Ray dan sub-segmen.
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
Anda dapat menggunakan rentang kustom untuk memantau kinerja aktivitas internal yang tidak ditangkap oleh pustaka instrumentasi. Perhatikan bahwa hanya server jenis rentang yang diubah menjadi segmen X-Ray, semua rentang lainnya diubah menjadi sub-segmen X-Ray.
Pertama, Anda perlu membuat Tracer untuk menghasilkan bentang, yang dapat Anda peroleh melalui metode iniopenTelemetry.getTracer
. Ini akan memberikan instance Tracer dari TracerProvider
yang terdaftar secara global dalam Solusi instrumentasi manual dengan SDK contoh. Anda dapat membuat instance Tracer sebanyak yang diperlukan, tetapi biasanya memiliki satu Tracer untuk seluruh aplikasi.
Tracer tracer = openTelemetry.getTracer("my-app
");
Anda dapat menggunakan Tracer untuk membuat bentang.
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();
Rentang memiliki tipe internal default.
// Default span of type INTERNAL will become an X-Ray subsegment
Span span = tracer.spanBuilder("process-header")
.startSpan();
try (Scope ignored = span.makeCurrent()) {
doProcessHeader();
}
Menambahkan anotasi dan metadata ke jejak dengan SDK OpenTelemetry
Dalam contoh di atas, setAttribute
metode ini digunakan untuk menambahkan atribut ke setiap rentang. Secara default, semua atribut rentang akan diubah menjadi metadata dalam data mentah X-Ray. Untuk memastikan bahwa atribut diubah menjadi anotasi dan bukan metadata, contoh di atas menambahkan kunci atribut tersebut ke daftar atribut. aws.xray.annotations
Untuk informasi selengkapnya, lihat Mengaktifkan Anotasi dan Anotasi X-Ray yang Disesuaikan dan metadata.
Dengan agen Java OpenTelemetry berbasis
Jika Anda menggunakan agen Java untuk secara otomatis instrumen aplikasi Anda, Anda perlu melakukan instrumentasi manual dalam aplikasi Anda. Misalnya, ke kode instrumen dalam aplikasi untuk bagian yang tidak dicakup oleh pustaka instrumentasi otomatis apa pun.
Untuk melakukan instrumentasi manual dengan agen, Anda perlu menggunakan opentelemetry-api
artefak. Versi artefak tidak bisa lebih baru dari versi agen.
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();
Instrumentasi Lambda
- With X-Ray SDK
-
Menggunakan X-Ray SDK, setelah Lambda Anda mengaktifkan Active Tracing, tidak ada konfigurasi tambahan yang diperlukan untuk menggunakan X-Ray SDK. Lambda akan membuat segmen yang mewakili pemanggilan penangan Lambda, dan Anda dapat membuat sub-segmen atau pustaka instrumen menggunakan X-Ray SDK tanpa konfigurasi tambahan.
- With OpenTelemetry-based solutions
Lapisan Lambda instrumentasi otomatis - Anda dapat secara otomatis menginstrumentasi Lambda Anda dengan lapisan Lambda yang dijual menggunakan solusi berikut AWS :
CloudWatch Sinyal Aplikasi Lapisan Lambda (Disarankan)
Lapisan Lambda ini memiliki Sinyal CloudWatch Aplikasi diaktifkan secara default, yang memungkinkan pemantauan kinerja dan kesehatan untuk aplikasi Lambda Anda dengan mengumpulkan metrik dan jejak. Untuk hanya melacak, atur variabel lingkungan Lambda. OTEL_AWS_APPLICATION_SIGNALS_ENABLED=false
AWS lapisan Lambda terkelola untuk ADOT Java. Untuk informasi selengkapnya, lihat AWS Distro untuk OpenTelemetry Lambda Support For Java.
Untuk menggunakan instrumentasi manual bersama dengan lapisan instrumentasi otomatis, lihat. Solusi instrumentasi manual dengan SDK Untuk mengurangi start dingin, pertimbangkan untuk menggunakan instrumentasi OpenTelemetry manual untuk menghasilkan OpenTelemetry jejak untuk fungsi Lambda Anda.
OpenTelemetry instrumentasi manual untuk AWS Lambda
Pertimbangkan kode fungsi Lambda berikut yang membuat panggilan 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);
}
}
}
Berikut adalah dependensinya.
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')
}
Untuk menginstruksikan handler Lambda Anda dan klien Amazon S3 secara manual, lakukan hal berikut.
Ganti kelas fungsi Anda yang mengimplementasikan RequestHandler
(atau RequestStreamHandler) dengan kelas yang memperpanjang TracingRequestHandler
(atau TracingRequestStreamHandler).
Buat instance TracerProvider dan daftarkan objek secara global. OpenTelemetrySdk TracerProvider Disarankan untuk dikonfigurasi dengan:
Prosesor Rentang Sederhana dengan eksportir rentang UDP X-Ray untuk mengirim Jejak ke titik akhir X-Ray UDP Lambda
Sampler yang ParentBased selalu aktif (Default jika tidak dikonfigurasi)
Resource dengan service.name disetel ke nama fungsi Lambda
Penyebar X-Ray Lambda
Ubah handleRequest
metode ke doHandleRequest
dan berikan OpenTelemetrySdk
objek ke kelas dasar.
Instrumentasi klien Amazon S3 dengan instrumentasi OpenTemetry AWS SDK dengan mendaftarkan pencegat saat membangun klien.
Anda memerlukan dependensi OpenTelemetry terkait berikut.
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')
}
Kode berikut menunjukkan fungsi Lambda setelah perubahan yang diperlukan. Anda dapat membuat rentang kustom tambahan untuk melengkapi rentang yang disediakan secara otomatis.
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);
}
}
}
Saat menjalankan fungsi Lambda, Anda akan melihat jejak berikut di bawah Trace Map di CloudWatch konsol.