Publique las métricas del SDK para las funciones mediante AWS LambdaAWS SDK for Java 2.x - AWS SDK for Java 2.x

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 AWS LambdaAWS SDK for Java 2.x

Como las funciones Lambda suelen ejecutarse entre milisegundos y minutos, cualquier retraso en el envío de las métricas, como ocurre con ellasCloudWatchMetricPublisher, corre el riesgo de perder datos.

EmfMetricLoggingPublisherproporciona un enfoque más adecuado al escribir inmediatamente las métricas como entradas de registro estructuradas en el formato métrico CloudWatch integrado (EMF). EmfMetricLoggingPublisherfunciona en entornos de ejecución que tienen una integración integrada con Amazon CloudWatch Logs, como AWS Lambda Amazon Elastic Container Service.

Configuración

Para poder habilitar y usar las métricas mediante el usoEmfMetricLoggingPublisher, complete los siguientes pasos.

Paso 1: Añada la 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.

Incluye el emf-metric-logging-publisher ArtifactiD con el 2.30.3 número de versión o posterior en las dependencias de tu 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: Configura los permisos necesarios

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

Paso 3: Configurar el registro

Para garantizar una recopilación de métricas adecuada, configure el registro para que se envíe a la consola al mismo INFO nivel o a un nivel inferior (por ejemploDEBUG). En tu log4j2.xml archivo:

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

Consulte el tema sobre el registro en esta guía para obtener más información sobre cómo configurar un log4j2.xml archivo.

Configurar y usar EmfMetricLoggingPublisher

La siguiente clase de función Lambda primero crea y configura una EmfMetricLoggingPublisher instancia 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.

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

{ "id": "23456" }

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

Cuando CloudWatch recibe un evento de registro en formato EMF, analiza automáticamente el JSON estructurado para extraer los 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 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.

Próximos pasos: Para aplicaciones de ejecución prolongada, consulte Publicar métricas del SDK desde aplicaciones de ejecución prolongada para publicar métricas CloudWatch basadas en datos.