本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
从版本 1 到版本 2 的 SDK 指标发布发生了变化
本主题详细介绍了客户端 SDK 指标发布从版本 1.x (v1) 到 2.x 版本 (v2) 的变化。 适用于 Java 的 AWS SDK
High-level 改变
架构变更
在 v1 中,指标收集是一个全局 JVM-wide 设置,您可以通过系统属性启用该设置。SDK 会自动将收集到的所有指标发布到 CloudWatch。只有一个指标目的地。
在 v2 中,指标收集使用可插入的MetricPublisher
-
CloudWatchMetricPublisher
:汇总指标并将其定期上传到。 CloudWatch最适合长时间运行的应用程序。 -
EmfMetricLoggingPublisher
:将指标写成 CloudWatch 嵌入式指标格式 (EMF) 的结构化日志条目。最适合 Lambda 函数和其他短寿命环境。 -
LoggingMetricPublisher
:通过 SLF4J 日志将指标输出到控制台。最适合本地开发和调试。
范围变更
在 v1 中,启用指标会发布 JVM 中所有 AWS 服务客户端的数据。在 v2 中,您可以在服务客户端级别或单个请求级别控制指标。
指标类型更改
v1 收集三类指标: AWS 请求指标、 AWS 服务指标和计算机指标(堆内存、线程数、打开的文件描述符)。
v2 侧重于 SDK 请求和响应指标,例如 API 调用时长、编组时长、签名持续时间和重试次数。v2 不收集堆内存、线程数和打开文件描述符等机器指标。要继续在中收集 JVM 指标 CloudWatch,您可以使用带有 JMX 指标收集功能的CloudWatch 代理。
依赖关系的变化
下表显示了 v1 和 v2 之间的 Maven 依赖关系和软件包名称的变化。
| 更改 | v1 | v2 |
|---|---|---|
|
Maven 依赖项 |
|
|
| 软件包名称 | com.amazonaws.metrics |
software.amazon.awssdk.metrics |
v2 工件取决于用例,如下表所示。
| 使用案例 | v2 artifactId | SDK 的最低版本 |
|---|---|---|
| Long-running 应用程序 | cloudwatch-metric-publisher |
emrfs |
| Lambda 函数 | emf-metric-logging-publisher |
2.30.3 |
| 开发和调试 | 无需其他依赖项(LoggingMetricPublisher在 SDK 核心中) |
emrfs |
API 更改
启用 指标
下表比较了如何在 v1 和 v2 中为不同的用例启用指标。
| 使用案例 | v1 | v2 |
|---|---|---|
|
全局启用指标 |
添加 JVM 系统属性:
|
不支持。将一个附加MetricPublisher到每个服务客户端。 |
|
在没有证书文件的情况下在 Amazon EC2 上启用指标 |
|
不适用。v2 使用其标准凭证解析。 |
|
为服务客户端启用指标 |
不支持。指标是全局指标或非全局指标。 |
|
|
为单个请求启用指标 |
不支持。 |
|
配置目的 CloudWatch 地
下表显示了与 v2 相比,如何在 v1 中配置 CloudWatch 目标。
| 使用案例 | v1 | v2 |
|---|---|---|
|
设置 CloudWatch 区域 |
系统属性属性:
|
|
|
设置上传频率 |
不可配置。大约每分钟上传一次。 |
|
|
设置 CloudWatch 命名空间 |
固定为AWSSDK/Java。 |
默认值为
注意如果您有引用 v1 命名空间的现有 CloudWatch 仪表板或警报 |
|
排除计算机指标 |
系统属性属性:
|
不适用。v2 不收集计算机指标。 |
Lambda 函数的指标
v1 没有 Lambda-specific 指标解决方案。在 v2 中,使用EmfMetricLoggingPublisher它以 CloudWatch 嵌入式指标格式 (EMF) 将指标写成结构化日志条目:
// v2 - Lambda-optimized metrics publishing EmfMetricLoggingPublisher emfPublisher = EmfMetricLoggingPublisher.builder() .namespace("MyApp") .dimensions(CoreMetric.SERVICE_ID, CoreMetric.OPERATION_NAME) .build(); DynamoDbClient dynamoDb = DynamoDbClient.builder() .overrideConfiguration(c -> c.addMetricPublisher(emfPublisher)) .build();
注意
在 Lambda 环境中,会从环境logGroupName变量中自动检测到。AWS_LAMBDA_LOG_GROUP_NAME在非 Lambda 环境中,例如 Amazon ECS 或 Amazon EC2,您必须在构建logGroupName器上明确设置。
开发和调试指标
v1 没有基于控制台的指标输出。在 v2 中,使用LoggingMetricPublisher:
// v2 - Console output for debugging MetricPublisher loggingPublisher = LoggingMetricPublisher.create(); S3Client s3 = S3Client.builder() .overrideConfiguration(c -> c.addMetricPublisher(loggingPublisher)) .build();
生命周期管理
在 v1 中,一旦设置了系统属性,指标收集将在 JVM 的生命周期内运行。在 v2 中,您必须管理以下内容的生命周期:MetricPublisher
// v2 - Close the publisher when no longer needed MetricPublisher metricsPub = CloudWatchMetricPublisher.create(); DynamoDbClient ddb = DynamoDbClient.builder() .overrideConfiguration(c -> c.addMetricPublisher(metricsPub)) .build(); // ... use the client ... metricsPub.close(); // Flushes remaining metrics to CloudWatch ddb.close();
重要
当不再需要该MetricPublisher实例时,请调用close该实例。不这样做可能会导致线程或文件描述符泄漏。
所需的权限
下表列出了每个指标发布者所需的 IAM 权限。
| 权限类型 | v1 | v2 () CloudWatchMetricPublisher | v2 () EmfMetricLoggingPublisher |
|---|---|---|---|
| IAM 权限 | cloudwatch:PutMetricData |
cloudwatch:PutMetricData |
logs:PutLogEvents |
限制
S AWS CRT-based 3 客户端目前不支持 v2 中的 SDK 指标收集。