Publicación de métricas del SDK para funciones AWS Lambda mediante AWS SDK for Java 2.x - AWS SDK for Java 2.x

Publicación de métricas del SDK para funciones AWS Lambda mediante AWS SDK for Java 2.x

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 proporciona un método más adecuado al escribir inmediatamente las métricas como entradas de registro estructuradas en formato Embedded Metric Format (EMF) de CloudWatch. EmfMetricLoggingPublisher funciona en entornos de ejecución que tienen una integración incorporada con Registros de Amazon CloudWatch, como AWS Lambda y Amazon Elastic Container Service.

Configuración

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

Paso 1: agregación de dependencia requerida

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

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

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 de esta guía para obtener más información sobre cómo configurar un archivo log4j2.xml.

Configure y use EmfMetricLoggingPublisher

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 de DynamoDB ejecuta el método putItem, publica automáticamente las métricas en un flujo de registro de CloudWatch en formato EMF.

Por ejemplo, si envía el siguiente evento a la función de Lambda de GameHandler con el registro configurado como se ha mostrado 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 de métricas. A continuación, CloudWatch crea las métricas correspondientes al tiempo que almacena la entrada de registro original en Registros de CloudWatch.

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 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 CloudWatchMetricPublisher.

Próximos pasos: para aplicaciones de ejecución prolongada, consulte Publicación de métricas del SDK de aplicaciones de ejecución prolongada para la publicación de métricas basadas en CloudWatch.