

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
<a name="metric-pub-impl-emf"></a>

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 le`CloudWatchMetricPublisher`, risque d'entraîner une perte de données. 

`[EmfMetricLoggingPublisher](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/metrics/publishers/emf/EmfMetricLoggingPublisher.html)`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).](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format.html) `EmfMetricLoggingPublisher`fonctionne dans des environnements d'exécution intégrés à Amazon CloudWatch Logs, tels qu' AWS Lambda Amazon Elastic Container Service.

## Configuration
<a name="metric-pub-impl-emf-set-up"></a>

Avant de pouvoir activer et utiliser les métriques en utilisant`EmfMetricLoggingPublisher`, procédez comme suit.

### Étape 1 : Ajouter la dépendance requise
<a name="metric-pub-impl-emf-set-up-deps"></a>

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](https://central.sonatype.com/artifact/software.amazon.awssdk/bom)</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
<a name="metric-pub-impl-emf-set-up-perm"></a>

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
<a name="metric-pub-impl-emf-set-up-logger"></a>

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 exemple`DEBUG`). 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](logging-slf4j.md) dans ce guide pour plus d'informations sur la configuration d'un `log4j2.xml` fichier. 

## Configuration et utilisation `EmfMetricLoggingPublisher`
<a name="metric-pub-impl-emf-use"></a>

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. 

### Exemple d'événement du journal EMF
<a name="emf-logged-output"></a>

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'API](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/metrics/publishers/emf/EmfMetricLoggingPublisher.Builder.html) `EmfMetricLoggingPublisher.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](metric-pub-impl-cwmp.md#enable-metrics-for-a-specific-request).

**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](metric-pub-impl-cwmp.md) CloudWatch basées sur des métriques.