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

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

使用来自的SDK指标 Amazon SDK for Java

使用 Amazon SDK for Java 2.x,您可以收集有关应用程序中服务客户端的指标,分析其中的输出 Amazon CloudWatch,然后对其采取行动。

默认情况下,中禁用指标收集SDK。本主题可帮助您启用和配置指标收集。

先决条件

必须先完成以下步骤,然后才能启用并使用指标。

  • 完成设置 Amazon SDK for Java 2.x中的步骤。

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

    要启用向发布指标 CloudWatch,还要在项目的依赖项中加入 artifactId cloudwatch-metric-publisher带有版本号2.14.0或更高版本号的。

    例如:

    <project> <dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.27.21</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>
  • 为指标发布者使用的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();

自定义指标发布者

以下课程演示如何为特定服务客户端的指标发布者设置自定义配置。自定义设置包括加载特定的配置文件、指定指标发布者向其发送请求的 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方法限制每次上传的调用次数。默认为无限制。

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

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

指标何时可用?

在 for Java 发布指标后,通常会SDK在 5-10 分钟内提供这些指标。要获得准确性和 up-to-date指标,请在从 Java 应用程序发出指标至少 10 分钟后查看 Cloudwatch。

收集哪些信息?

指标收集包括以下内容:

  • API请求数量,包括请求成功还是失败

  • 有关您在API请求中调用的 Amazon 服务的信息,包括返回的异常

  • 编组、签名和HTTP请求等各种操作的持续时间

  • HTTP客户端指标,例如打开的连接数、待处理的请求数以及所用HTTP客户端的名称

注意

可用的指标因HTTP客户而异。

有关完整列表,请参阅服务客户端指标

我该如何使用这些信息?

您可以使用SDK收集的指标来监控应用程序中的服务客户端。您可以查看总体使用趋势,识别异常情况,查看返回的服务客户端异常,或者深入了解特定问题。您还可以使用 Amazon CloudWatch创建警报,以便在应用程序达到您定义的条件时立即通知您。

有关更多信息,请参阅Amazon CloudWatch 用户指南中的使用 Amazon CloudWatch 指标和使用 Amazon CloudWatch 警报

主题