Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Publiez les métriques du SDK pour les AWS Lambda fonctions à l'aide du AWS SDK for Java 2.x
Comme les fonctions Lambda s'exécutent généralement pendant des millisecondes à quelques minutes, tout retard dans l'envoi des métriques, qui se produit avec leCloudWatchMetricPublisher
, risque d'entraîner une perte de données.
EmfMetricLoggingPublisher
fournit une approche plus adaptée en écrivant immédiatement les métriques sous forme d'entrées de journal structurées au format EMF (CloudWatch Embedded Metric Format). EmfMetricLoggingPublisher
fonctionne dans des environnements d'exécution intégrés à Amazon CloudWatch Logs, tels qu' AWS Lambda Amazon Elastic Container Service.
Configuration
Avant de pouvoir activer et utiliser les métriques à l'aide deEmfMetricLoggingPublisher
, procédez comme suit.
Étape 1 : Ajouter la dépendance requise
Configurez les dépendances de votre projet (par exemple, dans votre build.gradle
fichier pom.xml
ou dans votre fichier) pour utiliser la version 2.30.3
ou une version ultérieure du AWS SDK pour Java.
Incluez l'emf-metric-logging-publisher
ArtifactiD avec le 2.30.3
numéro de version ou une version ultérieure dans les dépendances de votre projet.
Par exemple :
<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>
Étape 2 : configurer les autorisations requises
Activez logs:PutLogEvents
les autorisations pour l'identité IAM utilisée par l'éditeur de métriques afin de permettre au SDK for Java d'écrire des journaux au format EMF.
Étape 3 : Configuration de la journalisation
Pour garantir une collecte correcte des métriques, configurez votre journalisation pour qu'elle soit sortie sur la console au INFO
niveau ou inférieur (par exempleDEBUG
). Dans votre log4j2.xml
dossier :
<Loggers> <Root level="WARN"> <AppenderRef ref="ConsoleAppender"/> </Root> <Logger name="software.amazon.awssdk.metrics.publishers.emf.EmfMetricLoggingPublisher" level="INFO" /> </Loggers>
Consultez la rubrique consacrée à la journalisation dans ce guide pour plus d'informations sur la configuration d'un log4j2.xml
fichier.
Configuration et utilisation EmfMetricLoggingPublisher
La classe de fonction Lambda suivante crée et configure d'abord une EmfMetricLoggingPublisher
instance, puis l'utilise avec un client de service 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"; } }
Lorsque le client DynamoDB exécute la méthode, il publie automatiquement putItem
les métriques dans CloudWatch un flux de journal au format EMF.
Par exemple, si vous envoyez l'événement suivant à la fonction GameHandler Lambda avec la journalisation configurée comme indiqué précédemment :
{ "id": "23456" }
Une fois que la fonction a traité l'événement, vous trouverez deux événements de journal qui ressemblent à ceux de l'exemple suivant. L'objet JSON du deuxième événement contient les données métriques du SDK Java pour l'PutItem
opération vers DynamoDB.
Lorsqu'il CloudWatch reçoit un événement de journal au format EMF, il analyse automatiquement le JSON structuré pour extraire les données métriques. CloudWatch crée ensuite les métriques correspondantes tout en stockant l'entrée de journal d'origine dans 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 documentation de l'APIEmfMetricLoggingPublisher.Builder
indique les options de configuration que vous pouvez utiliser.
Vous pouvez également activer la journalisation des métriques EMF pour une seule demande, comme indiqué pour le CloudWatchMetricPublisher.
Prochaines étapes : pour les applications de longue durée, voir Publier des métriques du SDK à partir d'applications de longue durée pour la publication de métriques CloudWatch basées sur des métriques.