Veröffentlichen Sie SDK-Metriken für AWS Lambda Funktionen mit dem AWS SDK for Java 2.x - AWS SDK for Java 2.x

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Veröffentlichen Sie SDK-Metriken für AWS Lambda Funktionen mit dem AWS SDK for Java 2.x

Da Lambda-Funktionen in der Regel Millisekunden bis Minuten lang ausgeführt werden, besteht bei jeder Verzögerung beim Senden der Metriken die Gefahr eines CloudWatchMetricPublisher Datenverlusts.

EmfMetricLoggingPublisherbietet einen geeigneteren Ansatz, indem Metriken sofort als strukturierte Protokolleinträge im CloudWatch Embedded Metric Format (EMF) geschrieben werden. EmfMetricLoggingPublisherfunktioniert in Ausführungsumgebungen mit integrierter Integration mit Amazon CloudWatch Logs wie AWS Lambda Amazon Elastic Container Service.

Einrichtung

Führen Sie die folgenden Schritte ausEmfMetricLoggingPublisher, bevor Sie Metriken mithilfe von aktivieren und verwenden können.

Schritt 1: Fügen Sie die erforderliche Abhängigkeit hinzu

Konfigurieren Sie Ihre Projektabhängigkeiten (z. B. in Ihrer pom.xml build.gradle OR-Datei) so, dass die Version 2.30.3 oder eine neuere Version von verwendet wird AWS SDK für Java.

Fügen Sie die artifactId emf-metric-logging-publisher mit der Versionsnummer 2.30.3 oder später in die Abhängigkeiten Ihres Projekts ein.

Zum Beispiel:

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

Schritt 2: Konfigurieren Sie die erforderlichen Berechtigungen

Aktivieren Sie die logs:PutLogEvents Berechtigungen für die IAM-Identität, die vom Herausgeber der Metriken verwendet wird, damit das SDK for Java Protokolle im EMF-Format schreiben kann.

Schritt 3: Protokollierung einrichten

Um eine korrekte Erfassung der Messwerte zu gewährleisten, konfigurieren Sie Ihre Protokollierung so, dass sie auf der Konsole oder INFO niedriger ausgegeben wird (z. B.DEBUG). In Ihrer log4j2.xml Datei:

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

Weitere Informationen zum Einrichten einer log4j2.xml Datei finden Sie im Thema Protokollierung in diesem Handbuch.

Konfigurieren und verwenden EmfMetricLoggingPublisher

Die folgende Lambda-Funktionsklasse erstellt und konfiguriert zunächst eine EmfMetricLoggingPublisher Instance und verwendet sie dann mit einem Amazon DynamoDB-Serviceclient:

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"; } }

Wenn der DynamoDB-Client die putItem Methode ausführt, veröffentlicht er automatisch Metriken in einem CloudWatch Log-Stream im EMF-Format.

Wenn Sie beispielsweise das folgende Ereignis an die GameHandler Lambda-Funktion senden, wobei die Protokollierung wie zuvor gezeigt konfiguriert ist:

{ "id": "23456" }

Nachdem die Funktion das Ereignis verarbeitet hat, finden Sie zwei Protokollereignisse, die dem folgenden Beispiel ähneln. Das JSON-Objekt im zweiten Ereignis enthält die Java SDK-Metrikdaten für den PutItem Vorgang mit DynamoDB.

Wenn ein Protokollereignis im EMF-Format CloudWatch empfangen wird, analysiert es automatisch das strukturierte JSON, um Metrikdaten zu extrahieren. CloudWatch erstellt dann entsprechende Metriken und speichert gleichzeitig den ursprünglichen Protokolleintrag in 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 }

Die API-Dokumentation für EmfMetricLoggingPublisher.Builder zeigt die Konfigurationsoptionen, die Sie verwenden können.

Sie können die EMF-Metrikprotokollierung auch für eine einzelne Anfrage aktivieren, wie für gezeigt. CloudWatchMetricPublisher

Nächste Schritte: Informationen zu Anwendungen mit langer Laufzeit finden Sie unter Veröffentlichen von SDK-Metriken aus Anwendungen mit langer Laufzeit für die Veröffentlichung von CloudWatch basierten Metriken.