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 列,键入一个描述表达式正在计算的内容的名称。

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

指标数学语法和函数

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

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

在以下各表中,Examples 列中的每个示例都是一个生成单个时间序列的表达式,用以帮助显示返回标量数字或时间序列数组的函数如何可以用作生成单个时间序列的有效表达式的一部分。

数据类型缩写

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

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

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

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

METRICS() 函数

METRICS() 函数返回图表上显示的所有指标。您可以在一个更大的表达式中使用 METRICS()。例如,表达式 SUM(METRICS()) 返回一个是所有绘成图表的指标值的总和的时间序列 (TS)。

您可以将 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)

一元减法 -

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]))

AVG

TS

TS[]

S

TS

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

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

AVG(METRICS())

CEIL

TS

TS[]

TS

TS[]

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

CEIL(m1)

SUM(CEIL(METRICS()))

FILL

TS, TS/S

TS[], TS/S

TS

TS[]

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

FILL(m1,10)

MIN(FILL(METRICS(), m2))

FLOOR

TS

TS[]

TS

TS[]

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

FLOOR(m1)

MIN(FLOOR(METRICS()))

MAX

TS

TS[]

S

TS

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

MAX(m1)/m1

MAX(METRICS())

METRIC_COUNT

TS[]

S

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

m1/METRIC_COUNT(METRICS())

MIN

TS

TS[]

S

TS

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

m1-MIN(m1)

MIN(METRICS())

PERIOD

TS

S

以秒为单位返回度量的周期。它仅支持作为输入传递的指标,而不是作为其他表达式结果的输入。

m1/PERIOD(m1)

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