Publikasikan metrik SDK untuk AWS Lambda fungsi menggunakan AWS SDK for Java 2.x - AWS SDK for Java 2.x

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Publikasikan metrik SDK untuk AWS Lambda fungsi menggunakan AWS SDK for Java 2.x

Karena fungsi Lambda biasanya dijalankan selama milidetik hingga menit, setiap penundaan pengiriman metrik, yang terjadi denganCloudWatchMetricPublisher, berisiko kehilangan data.

EmfMetricLoggingPublishermenyediakan pendekatan yang lebih cocok dengan segera menulis metrik sebagai entri log terstruktur dalam CloudWatch Embedded Metric Format (EMF). EmfMetricLoggingPublisherbekerja di lingkungan eksekusi yang memiliki integrasi bawaan dengan Amazon CloudWatch Log seperti AWS Lambda dan Amazon Elastic Container Service.

Set-up

Sebelum Anda dapat mengaktifkan dan menggunakan metrik dengan menggunakanEmfMetricLoggingPublisher, selesaikan langkah-langkah berikut.

Langkah 1: Tambahkan ketergantungan yang diperlukan

Konfigurasikan dependensi proyek Anda (misalnya, di build.gradle file pom.xml atau Anda) untuk menggunakan versi 2.30.3 atau versi yang lebih baru. AWS SDK untuk Java

Sertakan emf-metric-logging-publisher ArtifactID dengan 2.30.3 nomor versi atau yang lebih baru dalam dependensi proyek Anda.

Misalnya:

<project> <dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.30.11</version> <!-- Navigate the link to see the latest version. --> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>emf-metric-logging-publisher</artifactId> </dependency> </dependencies> </project>

Langkah 2: Konfigurasikan izin yang diperlukan

Aktifkan logs:PutLogEvents izin untuk identitas IAM yang digunakan oleh penerbit metrik untuk memungkinkan SDK for Java menulis log berformat EMF.

Langkah 3: Pengaturan logging

Untuk memastikan pengumpulan metrik yang tepat, konfigurasikan logging Anda ke output ke konsol di INFO level atau lebih rendah (sepertiDEBUG). Dalam log4j2.xml file Anda:

<Loggers> <Root level="WARN"> <AppenderRef ref="ConsoleAppender"/> </Root> <Logger name="software.amazon.awssdk.metrics.publishers.emf.EmfMetricLoggingPublisher" level="INFO" /> </Loggers>

Lihat topik logging dalam panduan ini untuk informasi selengkapnya tentang cara menyiapkan log4j2.xml file.

Konfigurasikan dan gunakan EmfMetricLoggingPublisher

Kelas fungsi Lambda berikut pertama kali membuat dan mengonfigurasi EmfMetricLoggingPublisher instance dan kemudian menggunakannya dengan klien layanan Amazon DynamoDB:

public class GameIdHandler implements RequestHandler<Map<String, String>, String> { private final EmfMetricLoggingPublisher emfPublisher; private final DynamoDbClient dynamoDb; public GameIdHandler() { // Build the publisher. this.emfPublisher = EmfMetricLoggingPublisher.builder() .namespace("namespace") .dimensions(CoreMetric.SERVICE_ID, CoreMetric.OPERATION_NAME) .build(); // Add the publisher to the client. this.dynamoDb = DynamoDbClient.builder() .overrideConfiguration(c -> c.addMetricPublisher(emfPublisher)) .region(Region.of(System.getenv("AWS_REGION"))) .build(); } @Override public String handleRequest(Map<String, String> event, Context context) { Map<String, AttributeValue> gameItem = new HashMap<>(); gameItem.put("gameId", AttributeValue.builder().s(event.get("id")).build()); PutItemRequest putItemRequest = PutItemRequest.builder() .tableName("games") .item(gameItem) .build(); dynamoDb.putItem(putItemRequest); return "Request handled"; } }

Ketika klien DynamoDB mengeksekusi putItem metode, secara otomatis menerbitkan metrik ke CloudWatch aliran log dalam format EMF.

Misalnya, jika Anda mengirim acara berikut ke fungsi GameHandler Lambda dengan logging dikonfigurasi seperti yang ditunjukkan sebelumnya:

{ "id": "23456" }

Setelah fungsi memproses acara, Anda menemukan dua peristiwa log yang terlihat mirip dengan contoh berikut. Objek JSON dalam acara kedua berisi data metrik SDK Java untuk PutItem operasi ke DynamoDB.

Saat CloudWatch menerima peristiwa log dalam format EMF, secara otomatis mem-parsing JSON terstruktur untuk mengekstrak data metrik. CloudWatch kemudian membuat metrik yang sesuai sambil menyimpan entri log asli di CloudWatch Log.

2025-07-11 15:58:30 [main] INFO org.example.GameIdHandler:39 - Received map: {id=23456} 2025-07-11 15:58:34 [main] INFO software.amazon.awssdk.metrics.publishers.emf.EmfMetricLoggingPublisher:43 - { "_aws": { "Timestamp": 1752249513975, "LogGroupName": "/aws/lambda/GameId", "CloudWatchMetrics": [ { "Namespace": "namespace", "Dimensions": [ [ "OperationName", "ServiceId" ] ], "Metrics": [ { "Name": "AvailableConcurrency" }, { "Name": "PendingConcurrencyAcquires" }, { "Name": "ServiceCallDuration", "Unit": "Milliseconds" }, { "Name": "EndpointResolveDuration", "Unit": "Milliseconds" }, { "Name": "MaxConcurrency" }, { "Name": "BackoffDelayDuration", "Unit": "Milliseconds" }, { "Name": "MarshallingDuration", "Unit": "Milliseconds" }, { "Name": "LeasedConcurrency" }, { "Name": "SigningDuration", "Unit": "Milliseconds" }, { "Name": "ConcurrencyAcquireDuration", "Unit": "Milliseconds" }, { "Name": "ApiCallSuccessful" }, { "Name": "RetryCount" }, { "Name": "UnmarshallingDuration", "Unit": "Milliseconds" }, { "Name": "ApiCallDuration", "Unit": "Milliseconds" }, { "Name": "CredentialsFetchDuration", "Unit": "Milliseconds" } ] } ] }, "AvailableConcurrency": 0, "PendingConcurrencyAcquires": 0, "OperationName": "PutItem", "ServiceCallDuration": 1339, "EndpointResolveDuration": 81, "MaxConcurrency": 50, "BackoffDelayDuration": 0, "ServiceId": "DynamoDB", "MarshallingDuration": 181, "LeasedConcurrency": 1, "SigningDuration": 184, "ConcurrencyAcquireDuration": 83, "ApiCallSuccessful": 1, "RetryCount": 0, "UnmarshallingDuration": 85, "ApiCallDuration": 1880, "CredentialsFetchDuration": 138 }

Dokumentasi API untuk EmfMetricLoggingPublisher.Builder menampilkan opsi konfigurasi yang dapat Anda gunakan.

Anda juga dapat mengaktifkan pencatatan metrik EMF untuk satu permintaan seperti yang ditunjukkan untuk. CloudWatchMetricPublisher

Langkah selanjutnya: Untuk aplikasi yang berjalan lama, lihat Menerbitkan metrik SDK dari aplikasi yang berjalan lama untuk CloudWatch penerbitan metrik berbasis.