

# 指标概念
<a name="cloudwatch_concepts"></a>

下面是便于您了解和使用 Amazon CloudWatch 的核心术语和概念：
+ [OpenTelemetry 指标](#OpenTelemetry_metrics)
+ [命名空间](#Namespace)
+ [指标](#Metric)
+ [Dimensions](#Dimension)
+ [解决方案](#Resolution_definition)
+ [统计信息](#Statistic)
+ [百分位数](#Percentiles)
+ [警报](#CloudWatchAlarms)

 有关 CloudWatch 指标、警报、API 请求和警报电子邮件通知的服务限额的信息，请参阅 [CloudWatch 服务限额](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_limits.html)。

## OpenTelemetry 指标
<a name="OpenTelemetry_metrics"></a>

CloudWatch 还支持使用 OpenTelemetry Protocol（OTLP）发送的指标。OpenTelemetry 指标使用的数据模型与传统 CloudWatch 指标不同。OpenTelemetry 指标不使用命名空间和维度，而是使用带有遵循 OpenTelemetry 语义惯例的描述性标签（键值对）的指标名称。OpenTelemetry 指标支持每个指标多达 150 个标签，并支持包括量度类型，包括仪表、总和、直方图和指数直方图在内的指标类型。

OpenTelemetry 指标使用 CloudWatch Query Studio 中的 Prometheus 查询语言（PromQL）或通过兼容 Prometheus 的查询 API 进行查询。您可以在 OpenTelemetry 指标上设置基于 PromQL 的 CloudWatch 警报。

下表总结了 OpenTelemetry 指标与传统 CloudWatch 指标之间的主要区别。


| 概念 | 传统 CloudWatch 指标 | OpenTelemetry 指标 | 
| --- | --- | --- | 
| 身份 | 命名空间，指标名称，最多 30 个维度 | 指标名称，最多 150 个标签 | 
| 指标类型 | 单个值，统计数据集 | 仪表、总和、直方图、指数直方图 | 
| 摄取 | PutMetricData API 或 AWS CLI | OpenTelemetry Protocol（OTLP） | 
| 查询语言 | GetMetricStatistics、Metrics Insights | Prometheus 查询语言（PromQL） | 
| 警报 | 标准 CloudWatch 警报 | 基于 PromQL 的 CloudWatch 警报 | 
| 控制台体验 | CloudWatch Metrics 控制台 | CloudWatch Query Studio | 
| 保留 | 最长达 15 个月，自动汇总 | 30 天（公开预览版） | 

有关更多信息，请参阅[使用 OpenTelemetry 发送指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-OpenTelemetry-Sections.html)。

## 命名空间
<a name="Namespace"></a>

*命名空间*是用于 CloudWatch 指标的容器。不同命名空间中的指标彼此独立，因此来自不同应用程序的指标不会被错误地聚合到相同的统计信息中。

无默认命名空间。您必须为发布到 CloudWatch 的每个数据点指定命名空间。在创建指标时，您可以指定命名空间名称。这些名称必须包含有效的 ASCII 字符，且长度必须等于或少于 255 个字符。可用字符包括：字母数字字符（0-9A-Za-z）、句点（.）、连字符（-）、下划线（\$1）、正斜杠（/）、井号（\$1）、冒号（:）和空格符号。一个命名空间必须包含至少一个非空格字符。

AWS 命名空间通常使用以下命名约定：`AWS/service`。例如，Amazon EC2 使用 `AWS/EC2` 命名空间。有关 AWS 命名空间的列表，请参阅 [发布 CloudWatch 指标的 AWS 服务](aws-services-cloudwatch-metrics.md)。

## 指标
<a name="Metric"></a>

*指标*是 CloudWatch 中的基本概念。指标表示一个发布到 CloudWatch 并按时间排序的数据点集。可将指标视为要监控的变量，而数据点代表该变量随时间变化的值。例如，特定 EC2 实例的 CPU 使用率是 Amazon EC2 提供的一个指标。数据点本身可来自于您从中收集数据的任何应用程序或业务活动。

预设情况下，许多 AWS 服务免费提供资源（例如 Amazon EC2 实例、Amazon EBS 卷和 Amazon RDS 数据库实例）的指标。如需收费，您也可以对某些资源（例如 Amazon EC2 实例）或您自己的应用程序指标启用详细监控。关于自定义指标，您可以您选择的任何顺序和任何速率添加数据点。您可以按一组有序的时间序列数据来检索关于这些数据点的统计数据。

指标仅存在于创建它们的区域中。指标无法删除，但如果在 15 个月后没有向指标发布新数据，这些指标将自动过期。依据滚动机制，15 个月之前的数据点将过期；当新的数据点进入时，15 个月之前的数据将被丢弃。

指标是通过一个名称、一个命名空间以及零个或多个维度进行唯一定义的。指标中的每个数据点都有一个时间戳和一个度量单位（可选）。您可以从 CloudWatch 中检索任何指标的统计数据。

有关更多信息，请参阅 [查看可用的指标](viewing_metrics_with_cloudwatch.md) 和 [发布自定义指标](publishingMetrics.md)。

### 时间戳
<a name="about_timestamp"></a>

每个指标数据点必须与一个时间戳关联。时间戳最长可以为过去的两周和将来的两小时。如果不提供时间戳，CloudWatch 会根据收到数据点的时间创建一个时间戳。

时间戳为 `dateTime` 对象，包含完整的日期以及小时、分钟和秒 (例如，2016-10-31T23:59:59Z)。有关更多信息，请参阅 [dateTime](http://www.w3.org/TR/xmlschema-2/#dateTime)。尽管没有强制要求，但我们建议您使用协调世界时 (UTC)。从 CloudWatch 检索统计数据时，所有时间均采用 UTC。

CloudWatch 告警会基于当前时间 (UTC) 检查指标。发送到 CloudWatch 并且时间戳为非 UTC 时间的自定义指标会导致告警显示**数据不足**状态或产生延迟告警。

### 指标保留
<a name="metrics-retention"></a>

CloudWatch 将保留指标数据，如下所示：
+ 时间段短于 60 秒的数据点的可用时间为 3 小时。这些数据点是高精度自定义指标。
+ 时间段为 60 秒 (1 分钟) 的数据点可用 15 天
+ 时间段为 300 秒（5 分钟）的数据点可用 63 天
+ 时间段为 3600 秒 (1 小时) 的数据点可用 455 天 (15 个月)

最初以较短时间段发布的数据点汇总在一起，可实现长期存储。例如，如果您使用 1 分钟的时间段收集数据，数据以 1 分钟的精度保持 15 天可用。15 天之后，此数据仍可用，但汇总在一起，只能以 5 分钟的精度检索。63 天之后，数据进一步汇总，以 1 小时的精度提供。

**注意**  
控制台中不会显示在过去两周内没有任何新数据点的指标。当您在控制台的 **All metrics**（全部指标）选项卡的搜索框中键入指标名称或维度名称时，它们也不会显示，并且 [list-metrics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/list-metrics.html) 命令的结果中不会返回它们。检索这些指标的最佳方法是使用 AWS CLI 中的 [get-metric-data](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/get-metric-data.html) 或者 [get-metric-statistics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/get-metric-statistics.html) 命令。

## Dimensions
<a name="Dimension"></a>

*维度*是一个名称/值对，它是指标标识的一部分。您可以为一个指标分配最多 30 个维度。

每个指标包含用于描述该指标的特定特征，您可以将维度理解为这些特征的类别。维度可以帮助您设计统计数据计划的结构。因为维度是指标的唯一标识符的一部分，因此无论您在何时向一个指标添加唯一名称/值对，都会创建该指标的一个新变体。

向 CloudWatch 发送数据的 AWS 服务会向每个指标附加维度。您可使用维度筛选 CloudWatch 返回的结果。例如，您可通过在搜索指标时指定 `InstanceId` 维度来获取特定 EC2 实例的统计数据。

对于由特定 AWS 服务（如 Amazon EC2）生成的指标，CloudWatch 可以聚合多个维度的数据。例如，如果您在 `AWS/EC2` 命名空间中搜索指标但不指定任何维度，则 CloudWatch 会聚合指定指标的所有数据以创建您请求的统计数据。CloudWatch 不会跨多个维度聚合自定义指标的数据。

### 维度组合
<a name="dimension-combinations"></a>

CloudWatch 将维度的每种唯一组合视为一个单独的指标，即使指标具有相同的指标名称也是如此。您只能使用已发布的特定维度组合检索统计数据。当您检索统计数据时，为命名空间、指标名称和维度参数指定创建指标时使用的相同值。您还可指定 CloudWatch 要用于聚合的开始和结束时间。

例如，假设您在具有以下属性的 DataCenterMetric 命名空间中发布了 4 个名为 ServerStats 的不同指标：

```
Dimensions: Server=Prod, Domain=Frankfurt, Unit: Count, Timestamp: 2016-10-31T12:30:00Z, Value: 105
Dimensions: Server=Beta, Domain=Frankfurt, Unit: Count, Timestamp: 2016-10-31T12:31:00Z, Value: 115
Dimensions: Server=Prod, Domain=Rio,       Unit: Count, Timestamp: 2016-10-31T12:32:00Z, Value: 95
Dimensions: Server=Beta, Domain=Rio,       Unit: Count, Timestamp: 2016-10-31T12:33:00Z, Value: 97
```

如果您仅发布这 4 个指标，则可检索这些维度组合的统计数据：
+ `Server=Prod,Domain=Frankfurt`
+ `Server=Prod,Domain=Rio`
+ `Server=Beta,Domain=Frankfurt`
+ `Server=Beta,Domain=Rio`

如果您未指定任何维度，则无法检索以下维度的统计数据。（使用指标数学 **SEARCH** 函数时例外，该函数可以检索多个指标的统计数据。有关更多信息，请参阅 [在图表中使用搜索表达式](using-search-expressions.md)。）
+ `Server=Prod`
+ `Server=Beta`
+ `Domain=Frankfurt`
+ `Domain=Rio`

**注意**  
OpenTelemetry 指标使用标签而不是维度。标签的用途类似，但遵循 OpenTelemetry 语义惯例，每个指标最多支持 150 个标签。有关更多信息，请参阅 [OpenTelemetry 指标](#OpenTelemetry_metrics)。

## 解决方案
<a name="Resolution_definition"></a>

每个指标均为以下类型之一：
+ 标准精度，数据粒度为一分钟
+ 高精度，数据粒度为一秒

AWS 服务生成的指标在默认情况下为标准精度。在发布自定义指标时，您可以将其定义为标准精度或高精度。发布高精度指标时，CloudWatch 使用 1 秒的精度来存储指标，您可以按照 1 秒、5 秒、10 秒、30 秒或 60 秒的任意倍数的时间段读取和检索。

高精度指标让您对应用程序的亚分钟级活动有着更详细的直观认识。请记住，每次对自定义指标的 `PutMetricData` 调用都会收取费用，因此对高精度指标频繁调用 `PutMetricData` 会导致较高的费用。有关 CloudWatch 定价的信息，请参阅 [Amazon CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing/)。

如果对高精度指标设置告警，您可以指定 10 秒或 30 秒时间段的高精度告警，也可以设置 60 秒的任意倍数时间段的定期告警。10 秒或 30 秒时间段的高精度警报会产生较高的费用。

**注意**  
OpenTelemetry 指标以发送的分辨率进行摄取，没有最低粒度限制。OpenTelemetry 指标的分辨率和汇总行为与传统 CloudWatch 指标不同。

## 统计信息
<a name="Statistic"></a>

*统计数据*是指定时间段内的指标数据汇总。CloudWatch 提供统计数据的依据是您的自定义数据所提供的指标数据点，或其他 AWS 服务向 CloudWatch 提供的指标数据点。聚合通过使用命名空间、指标名称、维度以及数据点度量单位在您指定的时间段内完成。

有关 CloudWatch 支持的统计数据的详细定义，请参阅 [CloudWatch 统计数据定义](Statistics-definitions.md)。

## 单位
<a name="Unit"></a>

所有统计数据都有度量单位。示例单位包括 `Bytes`、`Seconds`、`Count` 和 `Percent`。有关 CloudWatch 支持的单位的完整列表，请参阅 *Amazon CloudWatch API 参考*中的 [MetricDatum](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) 数据类型。

您可在创建自定义指标时指定单位。如果未指定单位，CloudWatch 将使用 `None` 作为单位。单位帮助为数据提供概念意义。尽管在内部单位对于 CloudWatch 无重大意义，但其他应用程序还是可以根据单位得到语义信息。

指定度量单位的指标数据点是单独聚合的。当获得统计数据而不指定单位时，CloudWatch 会将相同单位的所有数据点聚合在一起。如果有两个完全相同的指标包含不同的单位，则每个单位会各返回一个数据流。

## 时间段
<a name="CloudWatchPeriods"></a>

*时间段*是与特定 Amazon CloudWatch 统计数据关联的时间的长度。每项统计信息代表在指定时间段内对收集的指标数据的聚合。时间段以秒为单位定义，时间段的有效值为 1、5、10、30 或 60 的任意倍数。例如，要指定六分钟的时间段，时间段的值应为 360。通过改变时间段的长度可以调整数据聚合的方式。该期限的默认值为 60 秒。期限可以短至一秒，如果期限大于默认值 60 秒，则必须为 60 的倍数。

只有您使用 1 秒的存储精度定义的自定义指标支持亚分钟级时间段。虽然设置为低于 60 的时间段的选项在控制台中始终可用，但您应选择与指标存储方式相符的时间段。有关支持亚分钟级时间段的指标的更多信息，请参阅[高精度指标](publishingMetrics.md#high-resolution-metrics)。

当您检索统计数据时，可指定时间段、开始时间和结束时间。这些参数决定了与统计数据关联的时间的总长度。开始时间和结束时间的默认值将让您获得上一小时的统计数据。您指定的开始时间值和结束时间值将确定 CloudWatch 返回的时间段的数量。例如，使用时间段、开始时间和结束时间的默认值检索统计数据将返回上一小时内每分钟的聚合统计数据集。如果您想要以 10 分钟为一块来聚合统计信息，请指定时间段 600。对于一个完整小时内聚合的统计数据，请指定时间段 3600。

当对某个时段的统计数据进行聚合时，将为聚合的数据标记上对应的时段起始时间。例如，从晚上 7:00 到晚上 8:00 聚合的数据将会加上晚上 7:00 的时间戳。此外，在晚上 7:00 和晚上 8:00 之间聚合的数据将在晚上 7:00 开始可见，然后该聚合数据的值可能会随着 CloudWatch 收集该时间段内的更多样本而发生更改。

时间段对 CloudWatch 告警也很重要。当您创建告警以监控特定指标时，您是在要求 CloudWatch 将该指标与指定的阈值进行比较。您对 CloudWatch 如何进行此比较拥有广泛的控制力。您不仅能够指定进行比较的时间段，还能够指定用于得出结论的评估期间的数目。例如，如果您指定三个评估期间，则 CloudWatch 将比较三个数据点的时间段。CloudWatch 仅告知您最旧的数据点是否超出阈值以及其他数据点是否超出阈值或丢失。

## 聚合
<a name="CloudWatchAggregation"></a>

Amazon CloudWatch 将根据您在检索统计数据时指定的时间段长度聚合统计数据。您可以根据需要发布任意数量包含相同或类似时间戳的数据点。CloudWatch 会根据指定周期长度聚合这些数据点。CloudWatch 不会跨区域自动聚合数据，但您可以使用指标数学来聚合来自不同区域的指标。

您可以为具有相同时间戳、相同命名空间和维度的指标发布数据点。CloudWatch 会返回这些数据点的聚合统计数据。还可以为包含任意时间戳的相同或不同指标发布多个数据点。

对于大型数据集，您可插入称为*统计数据集*的预先汇总数据集。通过统计数据集，可以让 CloudWatch 为一定数量的数据点提供 Min、Max、Sum 和 SampleCount。当您需要在一分钟内多次收集数据时，通常可以使用它。例如，假设您拥有一个关于网页请求延迟的指标。对命中的每一个网页都发布数据毫无意义。建议您收集该网页的所有点击延迟，每分钟汇总一次，然后将统计数据集发送到 CloudWatch。

Amazon CloudWatch 不会区分指标的来源。如果从不同的来源发布包含相同命名空间和维度的一个指标，则 CloudWatch 会将其视为一个单独的指标。这对分布式扩展型系统中的服务指标有其作用。例如，Web 服务器应用程序中的所有主机都可以发布表示其正在处理的请求延迟的相同指标。CloudWatch 会将这些指标视为单一指标，以便您可以获取应用程序中所有请求的最小值、最大值、平均值和总和的统计数据。

## 百分位数
<a name="Percentiles"></a>

*百分位数*指示某个值在数据集中的相对位置。例如，第 95 个百分位数表示 95% 的数据低于此值，5% 的数据高于此值。百分位数可帮助您更好地了解指标数据的分布情况。

百分位数通常用于隔离异常值。在正态分布中，95% 的数据在平均值的两个标准偏差范围内，99.7% 的数据在平均值的三个标准偏差范围内。落在三个标准偏差之外的任何数据通常被认为是异常值，因为它与平均值相差很多。例如，假设您正在监控 EC2 实例的 CPU 使用率，以确保客户有良好的体验。如果您监控平均值，这可以隐藏异常值。如果您监控最大值，单个异常值可能会使结果出现偏差。使用百分位数，您可以监控 CPU 使用率的第 95 个百分位数，以检查负载异常重的实例。

某些 CloudWatch 指标支持百分位数作为统计数据。对于这些指标，您可以使用百分位数监控您的系统和应用程序，就像使用其他 CloudWatch 统计数据（平均值、最小值、最大值和总和）一样。例如，在创建警报时，可以使用百分位数作为统计函数。您可以指定最多十个小数位的百分位数（例如 p95.0123456789）。

百分位数统计数据可用于自定义指标，只要您为自定义指标发布原始、未经汇总的数据点即可。当任何指标值为负数时，百分位数统计数据不可用于指标。

CloudWatch 需要原始数据点来计算百分位数。如果您改用统计数据集发布数据，只有满足以下条件之一，才能检索此数据的百分位数统计数据：
+ 统计数据集的 SampleCount 值为 1，且最小值、最大值和总和均相等。
+ 最小值和最大值相等，总和等于最小值乘以 SampleCount。

以下 AWS 服务包含支持百分位数统计的指标。
+ API Gateway
+ Application Load Balancer
+ Amazon EC2
+ Elastic Load Balancing
+ Kinesis
+ Lambda
+ Amazon RDS

CloudWatch 还支持切尾均值和其他性能统计数据，这些统计数据的使用与百分位数类似。有关更多信息，请参阅 [CloudWatch 统计数据定义](Statistics-definitions.md)。

## 警报
<a name="CloudWatchAlarms"></a>

您可使用*警报* 代表您自动发起操作。警报在指定的时间段内监控单个指标，并根据指标值相对于阈值的变化情况执行一项或多项指定操作。操作是一个发送到 Amazon SNS 主题或 Auto Scaling 策略的通知。您还可以将警报添加到控制面板。

告警仅为持续状态更改调用操作。CloudWatch 告警将不会调用操作，因为这些操作处于特定状态。该状态必须已改变并在指定的若干个时间段内保持不变。

创建警报时，请选择一个大于或等于指标的精度的警报监控周期。例如，对 Amazon EC2 进行的基本监控每隔 5 分钟提供一次实例指标。为基本监控指标设置警报时，选择的时间段至少应为 300 秒（5 分钟）。对 Amazon EC2 的详细监控以 1 分钟的精度提供实例指标。当为详细监控指标设置警报时，选择的时间段至少为 60 秒 (1 分钟)。

 如果对高精度指标设置告警，您可以指定 10 秒或 30 秒时间段的高精度告警，也可以设置 60 秒的任意倍数时间段的定期告警。高精度告警的费用较高。有关高精度指标的更多信息，请参阅 [发布自定义指标](publishingMetrics.md)。

有关更多信息，请参阅[使用 Amazon CloudWatch 告警](CloudWatch_Alarms.md)和[从图表上的指标创建告警](create_alarm_metric_graph.md)。

对于 OpenTelemetry 指标，可以创建基于 PromQL 的 CloudWatch 警报。这些警报使用 PromQL 查询来定义警报条件，使用的查询语言与 CloudWatch Query Studio 中提供的查询语言相同。