

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Publique las métricas del SDK para las funciones mediante el AWS Lambda AWS SDK for Java 2.x
<a name="metric-pub-impl-emf"></a>

Dado que las funciones de Lambda suelen ejecutarse entre milisegundos y minutos, cualquier retraso en el envío de las métricas, como ocurre con `CloudWatchMetricPublisher`, supone un riesgo de pérdida de datos. 

`[EmfMetricLoggingPublisher](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/metrics/publishers/emf/EmfMetricLoggingPublisher.html)`proporciona un enfoque más adecuado al escribir inmediatamente las métricas como entradas de registro estructuradas en [formato métrico CloudWatch integrado (EMF)](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format.html). `EmfMetricLoggingPublisher`funciona en entornos de ejecución que tienen una integración integrada con Amazon CloudWatch Logs, como AWS Lambda Amazon Elastic Container Service.

## Configuración
<a name="metric-pub-impl-emf-set-up"></a>

Para poder habilitar y utilizar métricas utilizando `EmfMetricLoggingPublisher`, siga estos pasos.

### Paso 1: agregación de dependencia requerida
<a name="metric-pub-impl-emf-set-up-deps"></a>

Configure las dependencias de su proyecto (por ejemplo, en su archivo `pom.xml` o `build.gradle`) para usar la versión `2.30.3` o posterior del AWS SDK para Java.

Incluya el artifactId `emf-metric-logging-publisher` con el número de versión `2.30.3` o posterior en las dependencias del proyecto.

Por ejemplo:

```
<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>
```

### Paso 2: configuración de permisos requeridos
<a name="metric-pub-impl-emf-set-up-perm"></a>

Habilite permisos de `logs:PutLogEvents` para la identidad de IAM utilizada por el publicador de métricas con el fin de permitir que el SDK para Java escriba registros con formato EMF.

### Paso 3: configuración del registro
<a name="metric-pub-impl-emf-set-up-logger"></a>

Para garantizar una recopilación de métricas adecuada, configure el registro para enviar a la consola en el nivel de `INFO` o un nivel inferior (por ejemplo, `DEBUG`). En el archivo `log4j2.xml`:

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

Consulte el [tema de registro](logging-slf4j.md) de esta guía para obtener más información sobre cómo configurar un archivo `log4j2.xml`. 

## Configure y utilice `EmfMetricLoggingPublisher`
<a name="metric-pub-impl-emf-use"></a>

La siguiente clase de función de Lambda primero crea y configura una instancia de `EmfMetricLoggingPublisher` y, a continuación, la utiliza con un cliente de servicio de 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";
    }
}
```

Cuando el cliente DynamoDB ejecuta `putItem` el método, publica automáticamente las métricas en CloudWatch un flujo de registro en formato EMF. 

### Ejemplo de evento de registro de EMF
<a name="emf-logged-output"></a>

Por ejemplo, si envía el siguiente evento a la función GameHandler Lambda con el registro configurado como se muestra anteriormente:

```
{
  "id": "23456"
}
```

Cuando la función procese el evento, encontrará dos eventos de registro similares al siguiente ejemplo. El objeto JSON del segundo evento contiene los datos de métricas del SDK de Java para la operación `PutItem` en DynamoDB.

Cuando CloudWatch recibe un evento de registro en formato EMF, analiza automáticamente el JSON estructurado para extraer datos métricos. CloudWatch a continuación, crea las métricas correspondientes mientras almacena la entrada de registro original en CloudWatch Logs.

```
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
}
```

La [documentación de la API](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/metrics/publishers/emf/EmfMetricLoggingPublisher.Builder.html) para `EmfMetricLoggingPublisher.Builder` muestra las opciones de configuración que puede utilizar.

También puede habilitar el registro de métricas de EMF para una sola solicitud, como [se muestra en el CloudWatchMetricPublisher](metric-pub-impl-cwmp.md#enable-metrics-for-a-specific-request).

**Próximos pasos:** Para aplicaciones de ejecución prolongada, consulte [Publicar métricas del SDK desde aplicaciones de ejecución prolongada](metric-pub-impl-cwmp.md) para publicar métricas CloudWatch basadas en datos.