Amazon CloudWatch
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

使用指标数学

指标数学使您可以查询多个 CloudWatch 指标,并使用数学表达式基于这些度量值创建新的时间序列。您可以在 CloudWatch 控制台中直观显示生成的时间序列,并将其添加到控制面板中。有关使用 AWS Lambda 指标的示例,您也可以将 Errors 指标除以 Invocations 指标以获取错误率并将生成的时间序列添加到 CloudWatch 控制面板上的图表中。

您也可以使用 GetMetricData API 操作以编程方式执行指标数学。

向 CloudWatch 图表中添加数学表达式

您可以向 CloudWatch 控制面板上的图表中添加数学表达式。每个图表限制为最多 100 个指标和表达式,因此仅当图表具有 99 个或更少的指标时,您才可以添加数学表达式。

向图表中添加数学表达式

  1. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

  2. 创建或编辑图表或行小部件。

  3. 选择 Graphed metrics

  4. 选择 Add a math expression。将为表达式显示一个新行。

  5. 对于 Details 列,键入数学表达式。以下部分中的表列出了您可以在表达式中使用的函数。

    要使用一个指标或另一个表达式的结果作为此表达式的公式的一部分,请使用 Id 列中显示的值。例如,m1+m2e1-MIN(e1)

    您可以更改 Id 的值。它可以包括数字、字母和下划线,并且必须以小写字母开头。将 Id 的值更改为更有意义的名称也可以使图表更易于理解。例如,从 m1m2 更改为 errorsrequests

  6. 对于表达式的 Label 列,键入一个描述表达式正在计算的内容的名称。

    如果某个表达式的结果是一组时间序列,则这些时间序列将在图表上单独的行中以不同的颜色显示。图表的下方是图表中的每个行的图例。对于生成多个时间序列的单个表达式,这些时间序列的图例文字的格式为 Expression-Label Metric-Label。例如,如果图表包含一个具有标签 Errors (错误) 的指标和一个具有标签 Filled With 0: (使用 0 填充:) 的表达式 FILL(METRICS(), 0),图例中的一个行将为 Filled With 0: Errors (使用 0 填充: 错误)。您可以将 Expression-Label 设置为空以使图例仅显示原始指标标签。

    当一个表达式在图表上生成了一组时间序列时,您无法更改用于这些时间序列的颜色。

  7. 在添加所需的表达式后,您可以选择通过隐藏某些原始指标来简化图表。要隐藏某个指标或表达式,请清除 Id 字段左侧的复选框。

指标数学语法和函数

以下各部分解释可用于指标数学的函数。所有函数都必须用大写字母编写(例如 AVG),而所有指标和数学表达式的 Id 字段都必须以小写字母开头。

任何数学表达式的最终结果都必须是单个时间序列或一组时间序列。某些函数会生成标量数字。您可以在一个更大的函数中使用这些函数,从而最终生成一个时间序列。例如,采用单个时间序列的 AVG 会生成标量数字,因此它不能是最终的表达式结果。但您可以在函数 m1-AVG(m1) 中使用它来显示每个数据点和该数据点的平均值之间的差异的时间序列。

数据类型缩写

某些函数仅对某些类型的数据有效。在函数表中使用以下列表中的缩写来代表每个函数支持的数据类型。

  • S 代表标量数字,例如 2、-5 或 50.25。

  • TS 是时间序列 (单个 CloudWatch 指标随时间变化的一系列值)。例如,实例 i-1234567890abcdef0 在过去三天的 CPUUtilization 指标。

  • TS [] 是一个时间序列数组,例如多个指标的时间序列。

METRICS() 函数

METRICS() 函数将返回请求中的所有指标。数学表达式不包括在内。

您可以在一个更大的表达式中使用 METRICS(),从而最终生成单个时间序列或一组时间序列。例如,表达式 SUM(METRICS()) 将返回作为所有绘成图表的指标值的总和的时间序列 (TS)。METRICS()/100 将返回一组时间序列,其中的每个时间序列都显示其中一个指标的各个数据点除以 100 的结果。

您可以将 METRICS() 函数与一个字符串一起使用,仅返回在其 Id 字段中包含该字符串的绘成图表的指标。例如,表达式 SUM(METRICS("errors")) 一个是所有在其 Id 字段中具有“errors”的绘成图表的指标值的总和的时间序列。您还可以使用 SUM([METRICS(“4xx”), METRICS(“5xx”)]) 来匹配多个字符串。

基本算术函数

下表列出了受支持的基本算术函数。时间序列中缺少的值被视为 0。如果数据点的值导致函数试图除以零,则会丢弃该数据点。

操作 参数 示例

算术运算符: + - * / ^

S, S

S, TS

TS, TS

S, TS[]

TS, TS[]

PERIOD(m1)/60

5 * m1

m1 - m2

SUM(100/[m1, m2])

AVG([m1,m2]/m3)

METRICS()*100

一元减法 -

S

TS

TS[]

-5*m1

-m1

SUM(-[m1, m2])

指标数学支持的函数

下表描述了可以在数学表达式中使用的函数。用大写字母编写所有函数。

任何数学表达式的最终结果都必须是单个时间序列或一组时间序列。以下部分中的表中的某些函数会生成标量数字。您可以在一个更大的函数中使用这些函数,从而最终生成一个时间序列。例如,采用单个时间序列的 AVG 会生成标量数字,因此它不能是最终的表达式结果。但您可以在函数 m1-AVG(m1) 中使用它来显示每个数据点和该数据点的平均值之间的差异的时间序列。

在下表中,Examples (示例) 列中的每个示例都是一个表达式,用于生成单个时间序列或一组时间序列。这显示了如何将返回标量数字的函数用作生成单个时间序列的有效表达式的一部分。

函数 参数 返回类型* 描述 示例

ABS

TS

TS[]

TS

TS[]

返回每个数据点的绝对值。

ABS(m1-m2)

MIN(ABS([m1, m2]))

ABS(METRICS())

AVG

TS

TS[]

S

TS

单个时间序列的 AVG 将返回一个标量,表示指标中所有数据点的平均值。一组时间序列的 AVG 将返回单个时间序列。缺少的值被视为 0。

SUM([m1,m2])/AVG(m2)

AVG(METRICS())

CEIL

TS

TS[]

TS

TS[]

返回每个指标的上限 (大于或等于每个值的最小整数)。

CEIL(m1)

CEIL(METRICS())

SUM(CEIL(METRICS()))

FILL

TS, TS/S

TS[], TS/S

TS

TS[]

当指标值缺失时,会用指定的填充值填充缺失的指标值。

FILL(m1,10)

FILL(METRICS(), 0)

FILL(m1, MIN(m1))

FLOOR

TS

TS[]

TS

TS[]

返回每个指标的下限 (小于或等于每个值的最大整数)。

FLOOR(m1)

FLOOR(METRICS())

MAX

TS

TS[]

S

TS

单个时间序列的 MAX 将返回一个标量,表示指标中所有数据点的最大值。一组时间序列的 MAX 值将返回单个时间序列。

MAX(m1)/m1

MAX(METRICS())

METRIC_COUNT

TS[]

S

返回时间序列数组中的指标数量。

m1/METRIC_COUNT(METRICS())

METRICS()

null

字符串

TS[]

METRICS() 函数将返回请求中的所有 CloudWatch 指标。数学表达式不包括在内

您可以在一个更大的表达式中使用 METRICS(),从而最终生成单个时间序列或一组时间序列。

您可以将 METRICS() 函数与一个字符串一起使用,仅返回在其 Id 字段中包含该字符串的绘成图表的指标。例如,表达式 SUM(METRICS("errors")) 一个是所有在其 Id 字段中具有“errors”的绘成图表的指标值的总和的时间序列。您还可以使用 SUM([METRICS(“4xx”), METRICS(“5xx”)]) 来匹配多个字符串。

AVG(METRICS())

SUM(METRICS("errors"))

MIN

TS

TS[]

S

TS

单个时间序列的 MIN 将返回一个标量,表示指标中所有数据点的最小值。一组时间序列的 MIN 将返回单个时间序列。

m1-MIN(m1)

MIN(METRICS())

PERIOD

TS

S

以秒为单位返回度量的周期。有效输入是指标,而不是其他表达式的结果。

m1/PERIOD(m1)

RATE

TS

TS[]

TS

TS[]

返回指标每秒的变化率。此项的计算结果是最新数据点值和上一个数据点值之差除以两个值的秒数之差。

RATE(m1)

RATE(METRICS())

STDDEV

TS

TS[]

S

TS

单个时间序列的 STDDEV 将返回一个标量,表示指标中所有数据点的标准偏差。一组时间序列的 STDDEV 将返回单个时间序列。

m1/STDDEV(m1)

STDDEV(METRICS())

SUM

TS

TS[]

S

TS

单个时间序列的 SUM 将返回一个标量,表示指标中所有数据点的值的总和。一组时间序列的 SUM 将返回单个时间序列。

SUM(METRICS())/SUM(m1)

SUM([m1,m2])

SUM(METRICS("errors"))/SUM(METRICS("requests"))*100

*仅使用返回标量数字的函数是无效的,因为表达式的所有最终结果都必须是单个时间序列或一组时间序列。而应将这些函数用作返回时间序列的较大表达式的一部分。

将指标数学与 GetMetricData API 操作一起使用

您可以使用 GetMetricData 来通过数学表达式执行计算,以及在一个 API 调用中检索大量指标数据。有关更多信息,请参阅 GetMetricData