使用发布 Amazon Lambda 函数的 SDK 指标 Amazon SDK for Java 2.x - Amazon SDK for Java 2.x
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用发布 Amazon Lambda 函数的 SDK 指标 Amazon SDK for Java 2.x

由于 Lambda 函数的执行时间通常为毫秒到几分钟,因此发送指标时出现的任何延迟(如发生这种情况)都有丢失CloudWatchMetricPublisher数据的风险。

EmfMetricLoggingPublisher通过立即将指标写成CloudWatch 嵌入式指标格式 (EMF) 的结构化日志条目,提供了一种更合适的方法。 EmfMetricLoggingPublisher适用于与 Amazon L CloudWatch ogs 内置集成的执行环境,例如 Amazon Lambda 和亚马逊弹性容器服务。

设置

在使用启用和使用指标之前EmfMetricLoggingPublisher,请先完成以下步骤。

步骤 1:添加所需的依赖关系

将项目依赖项(例如,在您的 pom.xmlbuild.gradle 文件中)配置为使用 适用于 Java 的 Amazon SDK版本 2.30.3 或更高版本。

在项目的依赖项中包含带有版本2.30.3号或更高版本号的 emf-metric-logging-publisher artifactID。

例如:

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

步骤 2:配置所需权限

为指标发布者使用的 IAM 身份启用logs:PutLogEvents权限,以允许适用于 Java 的 SDK 写入 EMF 格式的日志。

步骤 3:设置日志

为确保正确收集指标,请将您的日志配置为输出到INFO级别或更低级别的控制台(例如DEBUG)。在你的log4j2.xml文件中:

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

有关如何设置log4j2.xml文件的更多信息,请参阅本指南中的日志主题

配置和使用 EmfMetricLoggingPublisher

以下 Lambda 函数类首先创建和配置EmfMetricLoggingPublisher实例,然后将其与亚马逊 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"; } }

当 DynamoDB 客户端执行putItem该方法时,它会自动以 EMF 格式将指标发布到日志 CloudWatch 流。

API 文档EmfMetricLoggingPublisher.Builder显示了您可以使用的配置选项。

您也可以为单个请求启用 EMF 指标日志记录,如所 CloudWatchMetricPublisher示

后续步骤:对于长时间运行的应用程序,请参阅从长时间运行的应用程序发布 SDK 指标以发布 CloudWatch基于基础的指标。