

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
<a name="metric-pub-impl-emf"></a>

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

`[EmfMetricLoggingPublisher](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/metrics/publishers/emf/EmfMetricLoggingPublisher.html)`memberikan pendekatan yang lebih cocok dengan segera menulis metrik sebagai entri log terstruktur dalam [CloudWatch Embedded Metric Format (EMF](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format.html)). `EmfMetricLoggingPublisher`bekerja di lingkungan eksekusi yang memiliki integrasi bawaan dengan Amazon CloudWatch Log seperti AWS Lambda dan Amazon Elastic Container Service.

## Set-up
<a name="metric-pub-impl-emf-set-up"></a>

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

### Langkah 1: Tambahkan ketergantungan yang diperlukan
<a name="metric-pub-impl-emf-set-up-deps"></a>

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.

Contoh:

```
<project>
  <dependencyManagement>
   <dependencies>
      <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>bom</artifactId>
        <version>[2.30.11](https://central.sonatype.com/artifact/software.amazon.awssdk/bom)</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
<a name="metric-pub-impl-emf-set-up-perm"></a>

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
<a name="metric-pub-impl-emf-set-up-logger"></a>

Untuk memastikan pengumpulan metrik yang tepat, konfigurasikan logging Anda ke output ke konsol di `INFO` level atau lebih rendah (seperti`DEBUG`). 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](logging-slf4j.md) dalam panduan ini untuk informasi selengkapnya tentang cara menyiapkan `log4j2.xml` file. 

## Konfigurasikan dan gunakan `EmfMetricLoggingPublisher`
<a name="metric-pub-impl-emf-use"></a>

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. 

### Contoh peristiwa log EMF
<a name="emf-logged-output"></a>

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](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/metrics/publishers/emf/EmfMetricLoggingPublisher.Builder.html) 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](metric-pub-impl-cwmp.md#enable-metrics-for-a-specific-request)

**Langkah selanjutnya:** Untuk aplikasi yang berjalan lama, lihat [Menerbitkan metrik SDK dari aplikasi yang berjalan lama untuk CloudWatch penerbitan metrik](metric-pub-impl-cwmp.md) berbasis.