Publique métricas do SDK para AWS Lambda funções usando o AWS SDK for Java 2.x - AWS SDK for Java 2.x

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Publique métricas do SDK para AWS Lambda funções usando o AWS SDK for Java 2.x

Como as funções do Lambda normalmente são executadas de milissegundos a minutos, qualquer atraso no envio das métricas, o que acontece com CloudWatchMetricPublisher, apresenta o risco de perda de dados.

EmfMetricLoggingPublisherfornece uma abordagem mais adequada ao escrever imediatamente métricas como entradas de registro estruturadas em CloudWatch Embedded Metric Format (EMF). EmfMetricLoggingPublisherfunciona em ambientes de execução que têm integração integrada com o Amazon CloudWatch Logs, como AWS Lambda o Amazon Elastic Container Service.

Configuração

Antes de ativar e usar as métricas usando EmfMetricLoggingPublisher, siga as etapas a seguir.

Etapa 1: adicionar dependência necessária

Configure as dependências do seu projeto (por exemplo, no seu arquivo pom.xml ou build.gradle) para usar a versão 2.30.3 ou posterior do AWS SDK para Java.

Inclua o artifactId emf-metric-logging-publisher com o número da versão 2.30.3 ou posterior nas dependências do projeto.

Por exemplo:

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

Etapa 2: configurar as permissões necessárias

Habilite as permissões logs:PutLogEvents para a identidade do IAM usada pelo publicador de métricas para permitir que o SDK para Java escreva logs formatados em EMF.

Etapa 3: configurar logs

Para garantir a coleta adequada de métricas, configure o envio dos logs ao console no nível de INFO ou inferior (como DEBUG). No arquivo log4j2.xml:

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

Consulte mais informações sobre como configurar um arquivo log4j2.xml no tópico de logs deste guia.

Configurar e usar EmfMetricLoggingPublisher

A seguinte classe de função do Lambda primeiro cria e configura uma instância EmfMetricLoggingPublisher e depois a usa com um cliente de serviço do 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"; } }

Quando o cliente do DynamoDB executa putItem o método, ele publica automaticamente as métricas em CloudWatch um stream de log no formato EMF.

Por exemplo, se você enviar o seguinte evento para a função GameHandler Lambda com o registro configurado conforme mostrado anteriormente:

{ "id": "23456" }

Depois que a função processa o evento, você encontra dois eventos de log semelhantes ao exemplo a seguir. O objeto JSON no segundo evento contém os dados de métricas do Java SDK para a operação PutItem no DynamoDB.

Quando CloudWatch recebe um evento de log no formato EMF, ele analisa automaticamente o JSON estruturado para extrair dados métricos. CloudWatch em seguida, cria métricas correspondentes enquanto armazena a entrada de registro original em 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 }

A documentação da API referente a EmfMetricLoggingPublisher.Builder mostra as opções de configuração que você pode usar.

Você também pode ativar o registro de métricas EMF para uma única solicitação, conforme mostrado no CloudWatchMetricPublisher.

Próximas etapas: Para aplicativos de longa execução, consulte Publicar métricas do SDK de aplicativos de longa execução para publicação de métricas CloudWatch baseadas.