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

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

发布长时间运行的应用程序的 SDK 指标

由于该CloudWatchMetricPublisher实施会汇总指标并将其定期上传到 Amazon CloudWatch ,因此其使用最适合长时间运行的应用程序。

指标发布者的默认设置旨在最大限度地减少内存使用量和 CloudWatch 成本,同时仍能为指标数据提供有用的见解。

设置

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

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

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

在项目的依赖项中包含带有版本2.14.0号或更高版本号的 cloudwatch-metric-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>cloudwatch-metric-publisher</artifactId> </dependency> </dependencies> </project>

步骤 2:配置所需权限

为指标发布者使用的 IAM 身份启用cloudwatch:PutMetricData权限,以允许 Java SDK 编写指标。

为特定请求启用指标

以下课程说明如何为请求启用 CloudWatch 指标发布器 Amazon DynamoDB。该代码段使用默认的指标发布者配置。

import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.metrics.publishers.cloudwatch.CloudWatchMetricPublisher; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.ListTablesRequest; public class DefaultConfigForRequest { // Use one MetricPublisher for your application. It can be used with requests or service clients. static MetricPublisher metricsPub = CloudWatchMetricPublisher.create(); public static void main(String[] args) { DynamoDbClient ddb = DynamoDbClient.create(); // Publish metrics the for ListTables operation. ddb.listTables(ListTablesRequest.builder() .overrideConfiguration(c -> c.addMetricPublisher(metricsPub)) .build()); // Perform more work in your application. // A MetricsPublisher has its own lifecycle independent of any service client or request that uses it. // If you no longer need the publisher, close it to free up resources. metricsPub.close(); // All metrics stored in memory are flushed to CloudWatch. // Perform more work with the DynamoDbClient instance without publishing metrics. // Close the service client when you no longer need it. ddb.close(); } }
重要

当服务客户端不再使用时,请确保您的应用程序在MetricPublisher实例close上调用。否则,可能会导致线程或文件描述符泄漏。

为特定服务客户端启用摘要指标

以下代码片段显示了如何为服务客户端启用具有默认设置的 CloudWatch 指标发布者。

MetricPublisher metricsPub = CloudWatchMetricPublisher.create(); DynamoDbClient ddb = DynamoDbClient.builder() .overrideConfiguration(c -> c.addMetricPublisher(metricsPub)) .build();

自定义 CloudWatch 指标发布者

以下课程演示如何为特定服务客户端的指标发布者设置自定义配置。自定义设置包括加载特定的配置文件、指定指标发布者向其发送请求的 Amazon 区域,以及自定义发布者向其发送指标的频率。 CloudWatch

import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider; import software.amazon.awssdk.core.metrics.CoreMetric; import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.metrics.publishers.cloudwatch.CloudWatchMetricPublisher; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.cloudwatch.CloudWatchAsyncClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import java.time.Duration; public class CustomConfigForDDBClient { // Use one MetricPublisher for your application. It can be used with requests or service clients. static MetricPublisher metricsPub = CloudWatchMetricPublisher.builder() .cloudWatchClient(CloudWatchAsyncClient.builder() .region(Region.US_WEST_2) .credentialsProvider(ProfileCredentialsProvider.create("cloudwatch")) .build()) .uploadFrequency(Duration.ofMinutes(5)) .maximumCallsPerUpload(100) .namespace("ExampleSDKV2Metrics") .detailedMetrics(CoreMetric.API_CALL_DURATION) .build(); public static void main(String[] args) { DynamoDbClient ddb = DynamoDbClient.builder() .overrideConfiguration(c -> c.addMetricPublisher(metricsPub)) .build(); // Publish metrics for DynamoDB operations. ddb.listTables(); ddb.describeEndpoints(); ddb.describeLimits(); // Perform more work in your application. // A MetricsPublisher has its own lifecycle independent of any service client or request that uses it. // If you no longer need the publisher, close it to free up resources. metricsPub.close(); // All metrics stored in memory are flushed to CloudWatch. // Perform more work with the DynamoDbClient instance without publishing metrics. // Close the service client when you no longer need it. ddb.close(); } }

上一个片段中显示的自定义设置具有以下效果。

  • cloudWatchClient方法允许您自定义用于发送指标的 CloudWatch 客户端。在此示例中,我们使用了与客户端发送指标的默认区域 us-east-1 不同的区域。我们还使用不同的命名配置文件 cloudwatch,其凭据将用于对请求进行 CloudWatch身份验证。这些证书必须具有权限cloudwatch:PutMetricData

  • uploadFrequency方法允许您指定指标发布者上传指标的频率。 CloudWatch默认值为每分钟一次。

  • maximumCallsPerUpload方法限制每次上传的调用次数。默认为无限制。

  • 默认情况下,适用于 Java 的 SDK 2.x 会在命名空间AwsSdk/JavaSdk2下发布指标。您可以使用该namespace方法来指定不同的值。

  • 默认情况下,SDK 会发布摘要指标。摘要指标包括平均值、最小值、最大值、总和和和样本数。通过在detailedMetrics方法中指定一个或多个 SDK 指标,SDK 会为每个指标发布更多数据。这些附加数据支持百分位数统计信息,例如 p90 和 p99,供您查询。 CloudWatch详细指标对于延迟指标特别有用APICallDuration,例如衡量 SDK 客户端请求的 end-to-end延迟。您可以使用CoreMetric类的字段来指定其他常用 SDK 指标。