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á.
Publicar métricas do SDK para funções do AWS Lambda 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.
O EmfMetricLoggingPublisher fornece uma abordagem mais adequada ao escrever imediatamente métricas como entradas de log estruturadas no CloudWatch Embedded Metric Format (EMF). EmfMetricLoggingPublisher funciona em ambientes de execução que têm integração com o Amazon CloudWatch Logs, como o AWS Lambda e 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 for 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.
Configure e use o 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 o método putItem, ele publica automaticamente as métricas em um fluxo de logs do CloudWatch no formato EMF.
Por exemplo, se você enviar o seguinte evento para a função do Lambda GameHandler 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 o CloudWatch recebe um evento de log no formato EMF, ele analisa automaticamente o JSON estruturado para extrair dados das métricas. Depois, o CloudWatch cria métricas correspondentes enquanto armazena a entrada de log original no 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 APIEmfMetricLoggingPublisher.Builder mostra as opções de configuração que você pode usar.
Também é possível ativar os logs de métricas em EMF para uma única solicitação, conforme mostrado para o CloudWatchMetricPublisher.
Próximas etapas: para aplicações de longa execução, consulte Publicar métricas do SDK de aplicações de longa execução para publicação de métricas com base no CloudWatch.